2012-03-31 8 views
2

私はこのような構造を作りたい:オブジェクトを配列でいっぱいにするには?

var myThings = { 
    thing1: { 
     ['24-04-12', '90'], 
     ['25-04-12', '90'], 
     ['26-04-12', '90'] 
    }, 
    thing2: { 
     ['24-04-12', '10'], 
     ['25-04-12', '30'], 
     ['26-04-12', '210'] 
    } 
} 

(ハードコード4つのものがあります)。各オブジェクトで

配列がループに追加されますので、私のコードは次のようになります。私は、オブジェクトの中に私の配列をプッシュする方法を考え出すことはできません

var myThings = {"thing1":{}, "thing2":{}}; 

私は愚かである、またはこれを行う方法ではありませんか?

ありがとうございます!

+0

それを行う方法ではありません。オブジェクトに「緩い」配列を持つことはできません。代わりに配列を使用する必要があります。 – JJJ

+0

どうすれば構造化できますか?後でthing1、thing2などをループして、内部配列から日付と価格を読み込みます。どのような構造を使用しますか? –

+0

配列の配列: 'var myThings = {" thing1 ":[]、" thing2 ":[]}、' –

答えて

5

代わりにObjectArrayにする必要があります。今のような

var myThings = { 
    thing1: [ 
     ['24-04-12', '90'], 
     ['25-04-12', '90'], 
     ['26-04-12', '90'] 
    ], 
    thing2: [ 
     ['24-04-12', '10'], 
     ['25-04-12', '30'], 
     ['26-04-12', '210'] 
    ] 
} 

thing1thing2は、あなただけではArrayに新しいArraysをプッシュするArray.prototype.pushを使用することができますArraysからです。

Object.keys(myThings).forEach(function(thing) { 
    myThings[ thing ].push(['01-01-12', '42']); 
}); 

このコードは、そのオブジェクト内のすべての現在のthings['01-01-12', '42']を追加します。

免責事項:上記のコードにはES5が含まれています。あなたは、私がやるだろう

+0

どのビットがES5なのですか? 'keys'メソッドですか? –

+0

@RichBradshaw: 'Object.keys'と' Array.prototype.forEach'です。かなり古いブラウザのためにそのメソッドをエミュレートするシムがたくさんあります。また、非常に簡単にES3にも書き込むことができます。 – jAndy

+0

オブジェクトを配列に配置できない理由を知りたい場合、何が必要ですか?私は少しの資金が足りないと思う。 –

3

をエミュレートすることやシムをサポートしているブラウザが必要です:

//create your array dynamically 
var array1 = [['24-04-12', '90'], 
     ['25-04-12', '90'], 
     ['26-04-12', '90'] ]; 

var myThings = { 
    thing1: array1 
     , 
    thing2: array1 
} 

この方法で、あなたのオブジェクトのプロパティは配列です。

0

内部アイテムがオブジェクトではなく、それらを配列にする必要があります。オブジェクトはキーと値のペアで存在する必要がありますが、これは使用には意味がありません。配列はキーと値のペアでもありますが、キーは単にインデックス番号です。

var myThings = { 
    thing1: [ // thing1 is now an array of arrays 
     ['24-04-12', '90'], 
     ['25-04-12', '90'], 
     ['26-04-12', '90'] 
    ], 
    thing2: [ // thing2 is now an array of arrays 
     ['24-04-12', '10'], 
     ['25-04-12', '30'], 
     ['26-04-12', '210'] 
    ] 
}; // don't forget this semicolon... 

あなたは、このように最も内側の値にアクセスします。

myThings.thing1[0][1]; // gives you back '90' 
myThings.thing2[2][0]; // gives you back '210' 

あなたがfor...in loopを使用し、myThingsオブジェクトを反復処理したい場合は

。内部配列のいずれかを反復処理する場合は、 regular for loopを使用します。限り、あなたは do NOT use for...in on the arrays :)

関連する問題