2013-04-09 11 views
7

私はその日がうまくいくことを願っています。ループを使用してJavascriptオブジェクトに複数のプロパティを追加しようとしています

私はプロパティを持たないオブジェクトを持っています。ループを使用してこのオブジェクトに複数のプロパティを追加しようとしています。 I

myObject = { }; 

for(i = 0; i < 2; i++){ 
    myObject.propA + i = foo; 
    myObject.propB + i = bar; 
}; 

:各プロパティは1

インクリメントし、それぞれの新しいプロパティを使用してだから私はこのようなものを持って何回ループを実行すると、依存オブジェクトに表示されますループに複数回追加しました

myObject.propA0 = foo; 
myObject.propB0 = bar; 
myObject.propA1 = foo; 
myObject.propB2 = bar; 

ループが何回実行されるかによって、オンザフライで生成されたオブジェクトの素敵なスタックを提供します。しかし、私はこれを取得していないようです。どのようにしてループの変数を作成して割り当てたら、それをどのように正確にプロパティに供給するのですか?

答えて

19

は、プロパティを設定するために、アレイ・アクセス方式を使用する名前

myObject['propa' + i] = foo; 
+0

これは実際には、非常に義務付けられていました。 –

5

ために角括弧表記法を使用してみてください。

myObject = { }; 

for(i = 0; i < 2; i++){ 
    myObject['propA' + i] = foo; 
    myObject['propB' + i] = bar; 
}; 
+0

これは、私の現在のプロジェクトのオブジェクトのいくつかは、配列のグループとしてうまく機能しているので、同様に有用であることが証明されています。 –

1

あなたは、標準のプロパティを作成するか、いずれかのgetter/setterプロパティを使用する

object['popA'+i]=... 

を使用する場合があり、この場合には、あなたは、後者がより多くのあなたを与える

Object.defineProperty(object, *propertyname*, *propertyDescriptor*). 

を使用する必要があります作成されたプロパティのオプション。

ここにすべての詳細:
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty

9

他のユーザーが言ったように、あなたは自分の名前の文字列でプロパティを参照するためにブラケット表記を使用する必要があります。

myObject['propA' + i] = 'foo'; 

しかし、なぜあなたは使用しません同様の番号のプロパティ名を持つ単一のオブジェクトではなく、オブジェクトの配列ですか?このような何か:

var myArray = []; 
for(i = 0; i < 2; i++){ 
    myArray.push({ 
     propA: 'foo', 
     propB: 'bar' 
    }); 
}; 

これは生成する必要があります:

[ 
    { propA: 'foo', propB: 'bar'}, 
    { propA: 'foo', propB: 'bar'} 
] 

それは私の意見では、道クリーナー見えます。