2012-12-12 115 views
119

我需要動態設置JS對象屬性名稱。如何從變量設置JS對象屬性名稱

for(i=1; i<3; i++) { 
    var key = i+'name'; 

    data = { 
     key : 'name1', 
    } 
} 

的結果應該是:

data = { 
    1name: 'name1' 
    2name: 'name1' 
} 
+0

如果他們是連續的,爲什麼你不使用數組? – epascarello

+0

我想知道你們哪三個擊中了錯誤的箭頭。來吧,大發脾氣。 – Charles

+0

[在JavaScript對象文本中爲鍵使用變量]的可能的重複(http://stackoverflow.com/questions/2274242/using-a-variable-for-a-- a-key-in-a-javascript-object-字面) – halfer

回答

130
var jsonVariable = {}; 
for(var i=1; i < 3; i++) { 
    jsonVariable[i + 'name'] = 'name' + i;   
} 
+3

下面的Musa的回答也正確表達了使用[]符號實際上是唯一的方法來做到這一點。 –

+0

另請注意@ChilNut的迴應現在描述了使用ES6執行此操作的最簡單方法 – rambossa

+0

實際上,如果循環限制是硬編碼且很小,那麼OP將試圖實現的新語法只有可能。 – Musa

18

這是動態的設定值

var jsonVariable = {}; 
for (var i = 1; i < 3; i++) { 
    var jsonKey = i + 'name'; 
    jsonVariable[jsonKey] = 'name' + i; 
} 
85

你將不得不使用[]符號來動態地設置鍵的方式。

var jsonVariable = {}; 
for(i=1; i<3; i++) {   
var jsonKey = i+'name'; 
jsonVariable[jsonKey] = 'name1'; 

} 

現在ES6可以使用對象文本語法動態創建對象鍵,只是包裝的變量[]

var key = i + 'name'; 
data = { 
    [key] : 'name1', 
} 
+1

jsonVariable = {};不應該在for循環中初始化。 – closure

+0

@raghavv謝謝修復 – Musa

+0

此外,您還在這裏製作jsonVariable全球 –

-1

檢查了這一點

jsonVariable = {}; 
for(i=1; i<=3; i++) {   
jsonVariable[i]=i+'name'; 
} 
document.writeln(jsonVariable[1]); 
document.writeln(jsonVariable[2]); 
document.writeln(jsonVariable[3]); 

​ 
0
jsonVariable = {} 
for(i=1; i<3; i++) {   
    var jsonKey = i+'name'; 
    jsonVariable[jsonKey] = 'name1' 
} 

這將類似於

在下面的新的瀏覽器

var keyName = 'myKey'; 
var obj = { 
       [keyName]: 1 
      }; 
obj.myKey;//1 

這句法可用:

58

的ECMAScript 6,你可以使用變量屬性名稱與對象文字語法,這樣

邊緣12+(不支持IE),FF34 +,Chrome瀏覽器44+,歌劇31+,Safari瀏覽器7.1+

https://kangax.github.io/compat-table/es6/

您可以使用transpiler(如babel)爲舊版瀏覽器添加支持。如果您正在使用模塊打包程序(例如rollupwebpack),則可以輕鬆地整個項目的傳輸。

+12

這應該是新接受的答案... – lotif

+2

感謝您添加真棒ES6語法 – rambossa

4

變量來自哪裏並不重要。主要的東西我們有一個...... 在方括號「[..]」之間設置變量名稱。

var optionName = 'nameA'; 
var JsonVar = { 
[optionName] : 'some value' 
} 
+0

這工作很好,我不知道它是否適用於所有瀏覽器/版本 – Mercury

相關問題