2012-12-12 13 views
119

Potrzebne jest dynamiczne ustawianie nazwy właściwości obiektu JS.Jak ustawić nazwę właściwości obiektu JS ze zmiennej

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

    data = { 
     key : 'name1', 
    } 
} 

wynik powinien być:

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

Jeśli są sekwencyjne, dlaczego nie używasz macierzy? – epascarello

+0

Chcę wiedzieć, który z trzech trafił w niewłaściwą strzałkę. No dalej, wepchnij się. – Charles

+0

możliwy duplikat [Używanie zmiennej dla klucza w literałach obiektów JavaScript] (http://stackoverflow.com/questions/2274242/using-a-variable-for-a-key-in-a-javascript-object- dosłowne) – halfer

Odpowiedz

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

Odpowiedź Musa poniżej również poprawnie określa, że ​​używanie notacji [] jest w rzeczywistości jedynym sposobem, aby to zrobić. –

+0

Należy również zauważyć, że odpowiedź @ ChilNut poniżej opisuje najłatwiejszy sposób wykonania tego przy użyciu ES6 – rambossa

+0

. W rzeczywistości nowa składnia, którą OP będzie próbował osiągnąć, będzie możliwa tylko wtedy, gdy limit pętli jest zakodowany i mały. – Musa

18

Jest to sposób dynamicznie ustawić wartość

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

Będziesz musiał użyć [] notacji ustawić klucze dynamicznie.

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

} 

Teraz w ES6 można użyć składni dosłownego obiektu, aby utworzyć klucze obiektów dynamicznie, po prostu zawinąć zmienną w []

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

jsonVariable = {}; nie powinny być inicjowane wewnątrz pętli for. – closure

+0

@raghavv thanks naprawiony – Musa

+0

Również robisz jsonVariable global here –

-1

to sprawdzić

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

Będzie być podobne do

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

Z ECMAScript 6, można użyć nazwy zmiennych własności ze składnią dosłownym obiektu, na przykład:

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

Ta składnia jest dostępna w następujących nowszych przeglądarek:

krawędź 12+ (Nie IE wsparcie), FF34 +, Chrome 44+, 31+ Opera, Safari 7.1+

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

Możesz dodać obsługę starszych przeglądarek za pomocą transpiler, takich jak babel. Łatwo jest przenieść cały projekt, jeśli używasz modułu pakującego, takiego jak rollup lub webpack.

+12

To powinna być nowa zaakceptowana odpowiedź ... – lotif

+2

Dzięki za dodanie niesamowitej składni ES6 – rambossa

4

Nie ma znaczenia, skąd pochodzi zmienna. Najważniejsze, że mamy jedno ... Ustaw nazwę zmiennej między nawiasami kwadratowymi "[..]".

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

Działa dobrze, zastanawiam się, czy działa we wszystkich przeglądarkach/wersjach – Mercury

Powiązane problemy