2012-12-12 30 views
119

değişkeninden ayarlama Bir JS nesnesi özellik adını dinamik olarak ayarlamanız gerekiyor.Bir JS nesnesi özellik ismini

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

    data = { 
     key : 'name1', 
    } 
} 

Sonucu olmalıdır:

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

Ardışık olmaları durumunda, neden bir Array kullanmıyorsunuz? – epascarello

+0

Hangi üçünüzün yanlış oku vurduğunu bilmek istiyorum. Hadi, çekil. – Charles

+0

olası bir kopyası [JavaScript nesnesinde bir anahtar için değişken kullanmak] (http://stackoverflow.com/questions/2274242/using-a-variable-for-a-key-in-a-javascript-object- literal) – halfer

cevap

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

Musa'nın yanıtı da doğru bir şekilde [] notasyonunu kullanmanın aslında bunu yapmanın tek yolu olduğunu açık bir şekilde dile getirmektedir. –

+0

Ayrıca, aşağıdaki ChilNut yanıtının şu an ES6'yı kullanarak yapmanın en kolay yolunu açıkladığını unutmayın – rambossa

+0

Gerçekte, OP'nin başarmaya çalıştığı yeni sözdizimi ile, döngü sınırının yalnızca kodlanmış ve küçük olması durumunda mümkün olacaktır. – Musa

18

Bu dinamik dinamik tuşları ayarlamak için [] notasyonu kullanmak gerekecektir değerini

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

belirlemenin bir yoludur.

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

} 

Şimdi ES6 içinde sadece []

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

jsonVariable = {}; for döngüsü içinde başlatılmamalıdır. – closure

+0

@raghavv Sabit – Musa

+0

teşekkürler Ayrıca burada jsonVariable global yapıyorsun –

-1

çek bunu

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' 
} 

bu irade değişkeni sarın, dinamik nesne anahtarları oluşturmak için nesne değişmez sözdizimini kullanabilirsiniz

ile benzer ECMAScript'e 6 ile
58

, böyle, nesnesi değişmez sözdizimi ile değişken özellik adlarını kullanabilirsiniz:

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

Bu sözdizimi kullanılabilir aşağıdaki yeni tarayıcılarda:

Edge'i 12+ (Hayır IE desteği), FF34 +, Chrome 44+, Opera 31+, Safari 7.1+

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

babel gibi transpiler kullanarak eski tarayıcılara destek ekleyebilirsiniz. rollup veya webpack gibi bir modül paketi kullanıyorsanız, tüm bir projeyi aktarmak kolaydır.

+12

Bu yeni kabul edilen cevap olmalıdır ... – lotif

+2

Harika ES6 sözdizimini eklediğiniz için teşekkür ederiz. – rambossa

4

Değişkenin nereden kaynaklandığı önemli değildir. Ana şeye sahibiz ... Değişken adını "[..]" köşeli parantezler arasında ayarlayın.

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

Bu güzel çalışıyor, tüm tarayıcılarda/sürümlerde çalışıp çalışmadığını merak ediyorum – Mercury

İlgili konular