如何将变量转换为对象?

时间:2012-06-01 21:58:04

标签: javascript coffeescript

有人能想到一个更好的重构变量a的解决方案,以便它成为一个包含其原值的普通对象吗?我不喜欢这样做,我宁愿选择单行,但它必须仍然可读。

a = "somevalue"
b = "somekey"

tmp = a
a = {}
a[b] = tmp

让我重新说一下:期望的(以及来自上面的代码:实际的)结果是:

a = { "somekey": "somevalue" }

当“somekey”和“somevalue”实际上是变量ba时,是否有不同的=更短的方法来实现这一目标?

5 个答案:

答案 0 :(得分:4)

你现在拥有的是实现这一目标的方法。

我能看到的唯一清理方法是尝试将每个变量减少到一个目的 - 使用a值或对象,而不是使用tmp进行交换:

var k = "somekey";
var v = "somevalue";

var a = {};
a[k] = v;

答案 1 :(得分:2)

你去......

(a = (b = [a, b, {}])[2])[b[1]] = b[0];

不能说我会推荐它。


也许这稍微好一点......

(a = (b = [a, b], {}))[b[1]] = b[0];

当然不比你的短。


或许更容易阅读,但仍然越来越短

(b = [a, b], a = {})[b[1]] = b[0];

答案 2 :(得分:1)

obj = (a...) -> o={}; o[a[i]]=o[a[++i]] for i in [0...a.length]; omyObject = obj key1, val1, key2, val2怎么样?

编辑:假设你的意思是来自标签的CoffeeScript,但问题中没有提到它,其余答案都是用JavaScript编写的。为了完整起见,JavaScript版本是:

function obj() {
  var o={}, i, l=arguments.length;
  for (i=0; i<l; i+=2) {
    o[arguments[i]] = o[arguments[i+1]];
  }
  return o;
}

var myObject = obj(key1, val1, key2, val2);

答案 3 :(得分:0)

尝试:

tmp = a;
a = {
    b: tmp
}

答案 4 :(得分:0)

使用a = {(b): a}表达式时LiveScript生成的内容被盗:

a = "somevalue"
b = "somekey"

a = (ref = {}; ref[b] = a; ref)

它仍然需要一个辅助变量,但它是可读的IMO,现在它是一个单行= D