Değişkenden JS nesnesi özellik adını ayarlama


178

Dinamik olarak bir JS nesne özellik adı ayarlamak gerekiyor.

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

    data = {
        key : 'name1',
    }
}

Sonuç şöyle olmalıdır:

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

Eğer ardışıksa, neden bir Array kullanmıyorsunuz?
epascarello

Hangi üçünüzün yanlış oka çarptığını bilmek istiyorum. Hadi bakalım.
Charles

Yanıtlar:


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

4
Musa'nın aşağıdaki yanıtı, [] notasyonunu kullanmanın aslında bunu yapmanın tek yolu olduğunu doğru bir şekilde ifade eder.
Dennis Plucinik

1
Ayrıca @ ChilNut'un aşağıdaki cevabının şimdi ES6 kullanarak bunu yapmanın en kolay yolunu açıkladığını unutmayın
rambossa

1
Aslında, yeni sözdizimi ile OP'nin elde etmeye çalıştığı şey ancak döngü sınırı sabit kodlanmış ve küçükse mümkün olacaktır.
Musa

168

[]Tuşları dinamik olarak ayarlamak için gösterimi kullanmanız gerekir .

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

}

Şimdi ES6'da nesne anahtarlarını dinamik olarak oluşturmak için nesne değişmez sözdizimini kullanabilirsiniz. []

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

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

Ayrıca burada jsonVariable global yapıyorsun
Dennis Plucinik

130

ECMAScript 6 ile değişken nesne adlarını nesne değişmez sözdiziminde şu şekilde kullanabilirsiniz:

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

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

Edge 12+ (IE desteği yok), FF34 +, Chrome 44+, Opera 31+, Safari 7.1+

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

Bir kullanarak eski tarayıcılara destek ekleyebilir transpiler gibi babel . Toplama veya web paketi gibi bir modül paketleyici kullanıyorsanız, projenin tamamını aktarmak kolaydır .


2
Müthiş ES6 sözdizimini eklediğiniz için teşekkürler
rambossa

ES6 olmadan var payload = {dynamicKey: val} tanımlayamıyorum, var payload = {} ve payload [variableName] = val yapmam gerekiyor.
Sainath SR

23

Bu, değeri dinamik olarak ayarlamanın yoludur

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

20

Bir değişkeni nesne anahtarı olarak kullanma

let key = 'myKey';

let data = {[key] : 'name1'; }

Bkz . Nesnenizde nasıl yinelenir?


Bunun neden bir çözüm olabileceğini başkalarına bildirmek için lütfen biraz daha ayrıntı verebilir misiniz?
phaberest

Eklediğiniz bilgiler gayet iyi, sadece kodla cevap
vermeyin

7

Değişkenin nereden geldiği önemli değildir. Ana şey bir var ... Değişken adını köşeli parantez "[..]" arasında ayarlayın.

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

Bu iyi çalışıyor, tüm tarayıcılarda / sürümlerde çalıştığını merak ediyorum
Mercury

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

bu benzer olacak

    jsonVariable = {
    1name : 'name1'
    2name : 'name1'
}

0

Yukarıdaki Sainath SR'nin yorum satırları boyunca, nesneyi tanımlayıp daha sonra nesnenin dışında başka bir anahtar / değer tanımlayarak Google Apps Komut Dosyasındaki (henüz ES6'yı desteklemeyen) bir değişkenten bir js nesnesi özellik adı ayarlayabildim:

var salesperson = ...

var mailchimpInterests = { 
        "aGroupId": true,
    };

mailchimpInterests[salesperson] = true;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.