2010-11-07 74 views
9

我正在使用这段代码(如下所示)试图在for循环中填充名为Parameters的对象文字。我需要key:value对与迭代变量i的循环一起分配,例如:{key_1:chunks[1],key_2:chunks[2]}。但是,我的代码不起作用。 'key_'+i没有被反映在文字中。将动态键值对传递给对象字面值?

很明显,我在这里错过了一些东西。有人能告诉我它是什么吗?...谢谢。

var Parameters=[]; 
var len = chunks.length; 
for (var i = 0; i < len; i++) { 
    var key='key_'+i 
    obj= { key : chunks[i]}; 
    Parameters.push(obj) 
} 
+1

相似的问题,这可能会对您有所帮助:http://stackoverflow.com/questions/1998735/dynamic-object-literal-in-javascript – DaiYoukai 2010-11-07 19:52:28

回答

29

编辑:使用var obj = {}; obj[key] = chunks[i];

因为ECMAScript中把这个作为{key:1}字面的key

+0

是在问题中只有一个错字。应该是'var Parameters = [];'。问题仍然存在。 – cube 2010-11-07 19:45:51

+0

谢谢,它现在有效。 – cube 2010-11-07 20:17:33

0

同样可以用于查找:obj [key]。不要remmeber obj.key将查找键对象

var obj = { 
    test:1 
} 


var key = 'test' 
obj.test = obj[key] = 1 

这里obj.key将无法正常工作

4

ES2015(via Babel)支持动态密钥:

const Parameters=[]; 
const len = chunks.length; 
for (let i = 0; i < len; i++) { 
    const key = `key_${i}`; 
    obj = { [key] : chunks[i]}; 
    Parameters.push(obj); 
} 

(注意周围的括号键)

或更好:

const Parameters = chunks.map((c, i) => ({ [`key_${i}`]: c }));