2012-12-12 50 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

あなたのうち3人が間違った矢を打つのを知りたい。さようなら、気をつけて。 – Charles

+0

[JavaScriptオブジェクトリテラルのキーに変数を使用する]の重複が可能です(http://stackoverflow.com/questions/2274242/using-a-variable-for-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' 
} 

この意志に変数をラップする、動的オブジェクトキーを作成するにはオブジェクトリテラル構文を使用することができます類似するもの

ECMAScriptの6で
58

は、あなたがこのように、オブジェクトリテラル構文を使用して変数のプロパティ名を使用することができます(

エッジ12+:

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

をこの構文は、次の新しいブラウザで利用可能ですIEのサポートされていません)、FF34 +、クロム44+、オペラ31+、サファリ7.1+

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

ん210

babelのようなtranspilerを使用すると、古いブラウザにサポートを追加できます。 rollupwebpackなどのモジュールバンドラを使用している場合は、プロジェクト全体を簡単に表示できます。

+12

これは新しい受け入れられた回答になるはずです... – lotif

+2

素晴らしいES6の構文をお寄せいただきありがとうございます – rambossa

4

変数の場所は関係ありません。私たちが持っている主なもの... 変数名を大括弧 "[..]"の間に設定します。

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

これはうまくいく、私はそれがすべてのブラウザ/バージョンで動作するのだろうか – Mercury

関連する問題