2012-10-19 67 views
2

可能重複:
Javascript expression to define object’s property name?如何將動態對象推入數組?

我試圖將對象添加到一個數組,但我希望有名稱和值是動態的。這裏有一個例子:

(function(){ 
     var data = []; 

     for(i=0; i<5; i++){ 
      data.push({'name' + i: i}); 
    } 

     console.log(data); 
    })() 

我想我不能使用一個變量的屬性,所以我不知道該怎麼做。

+0

雖然下面的答案是正確的,但我不得不問,你爲什麼要這麼做?你必須以一種尷尬的方式訪問它:'data [i] ['name'+ i]'來獲得'i' ...這是無意義的。 – Shmiddty

+0

@shmiddty這只是我做的一個簡單的例子,所以我沒有把任何人都與不必要的細節混淆。 – Dan

+0

但是,問題仍然存在,如果你將這些項目推送到一個數組中,'data [i] ['name'+ i]'是毫無意義的。爲什麼不使用'data [i] .name'? – Shmiddty

回答

7

如果要使用動態命名的屬性,你需要使用數組訪問符號:

var temp = {}; 
temp['name' + i] = i; 
data.push(temp); 
在IIFE:
(function(){ 
    var data, 
     temp, 
     i; 
    data = []; 
    for (i = 0; i < 5; i += 1) { 
     temp = {}; 
     temp['name' + i] = i; 
     data.push(temp); 
    } 
    console.log(data); 
}()); 
2

像這樣:

for(i=0; i<5; i++){ 
    var obj = {}; 
    obj["name" + i] = i; 
    data.push(obj); 
} 

但我不知道爲什麼你要硬編碼的索引屬性名稱。

既然你有一個數組,你已經有一個關聯的索引。這也使得財產難以查找。

如果你需要一個原始索引的關聯,我會使用一個單獨的屬性。

for(i=0; i<5; i++){ 
    data.push({name: i, idx: i}); 
} 
5

修改後的代碼:關鍵基礎變量值可以使用'[]'添加到對象中。 jsfiddle

(function(){ 
     var data = [], a; 

     for(i=0; i<5; i++){ 
      a = {}; 
      a['name' + i] = i; 
      data.push(a); 
    } 

     console.log(data); 
    })()