2013-06-22 134 views
2

看到一些與此相關的答案,但沒有人回答這個問題的版本。使用變量作爲對象的屬性名稱 - Javascript

考慮以下幾點:(linkto:jsfiddle

$(function(){ 

arrKeys = []; 
objArr = []; 

nameArr = ['name1','name2','name3','name4']; 
descArr = ['desc1','desc2','desc3','desc4']; 
allValues = {name: nameArr, desc: descArr}; 

arrKeys[0] = 'name'; 
arrKeys[1] = 'desc'; 

    first = arrKeys.shift(); // returns 'name' 

    $(allValues[first]).each(function (key,value) { 

     console.log(first); //returns 'name' 
     objArr[key] = {first:value}; //the problem 

    }); 

    console.log(objArr); 


}); 

隨着的console.log(objArr)產生對象的以下數組像這樣:

[對象,對象,對象,對象] 0:對象 第一: 「NAME1」 1:對象 第一: 「NAME2」 2:對象 第一:「NAME3」 3:對象 第一:「NAME4」 長度:4

的問題是,我想的屬性「第一」是var值第一(其是 「名稱」。所以代替,其結果將是:

[對象,對象,對象,對象] 0:對象 : 「NAME1」 1:對象 : 「NAME2」 2 :對象 名稱 「NAME3」 3:對象 : 「NAME4」 長度:4

(linkto:jsfiddle

回答

6

要設置變量必須使用括號標記鍵名稱;

console.log(first); // returns 'name' 
var obj = {}; 
obj[first] = value; 
objArr[key] = obj; // no longer a problem 

對不起它更詳細:(

編輯;

在ES6您現在可以使用括號記號直列;

const key = 'name'; 
const value = 'james'; 

const obj = { 
    [key]: value 
}; 
+0

完全的理解,謝謝! – Fezzik

1
var x = {} 
x[first] = value 
objArr[key] = x 

JavaScript對象文字語法對待加引號鍵就好像它們是引用的字符串而不是變量名稱一樣,必須使用括號語法來設置屬性在運行時計算名稱。

現在(你爲什麼要包裝你的代碼在一個jQuery打電話?你真的應該使用var聲明。)

+0

我並沒有使用這些全局變量,只是在將這個例子放在一起來處理這個特定的問題。 jquery是不重要的。感謝您的答覆。 – Fezzik

相關問題