2010-11-07 46 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 }));