有人能想到一个更好的重构变量a
的解决方案,以便它成为一个包含其原值的普通对象吗?我不喜欢这样做,我宁愿选择单行,但它必须仍然可读。
a = "somevalue"
b = "somekey"
tmp = a
a = {}
a[b] = tmp
让我重新说一下:期望的(以及来自上面的代码:实际的)结果是:
a = { "somekey": "somevalue" }
当“somekey”和“somevalue”实际上是变量b
和a
时,是否有不同的=更短的方法来实现这一目标?
答案 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]; o
比myObject = 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