2010-12-12 11 views
0

長さが更新されていないオブジェクトの配列があります。 Javascript配列について何を知らないのですか?JavaScript配列の長さが変更されない

http://stackoverflow.pastebin.com/aqZtRkkf

長さを0として報告され、それが空として配列を示しているが、にconsole.logは、配列インデックスを有するものとしてそれを示しています!

これらのアレイについて私は何を理解していませんか?

ありがとうございました! :+ D

答えて

5
this.Hats[ "Red" ] = new Hat(oPar, "red") 
    this.Hats[ "Yellow" ] = new Hat(oPar, "yellow"); 

これは問題が発生している場所です。あなたは、配列として配列を使用していない、あなたはオブジェクトとして使用しているだけで、配列のインデックスを塗りつぶす代わりにプロパティHats.RedとHats.Yellowを設定します。

これを試してください:あなたは連想配列を使用している

this.Hats.push(new Hat(oPar, "red")); 
    this.Hats.push(new Hat(oPar, "yellow")); 

The push function in javascript

+0

ありがとうございますが、配列インデックスとして文字列を使用する方法はありませんか? – dab

+0

配列を辞書として使用するには、項目に文字列インデックスを割り当てます。配列のlengthプロパティには影響しませんが、これらのメソッドのいずれかを使用してすべての辞書キーの長さを取得できます。 http://stackoverflow.com/questions/5223/length-of-javascript-associative-array –

+0

これを行うつもりならば、配列([])を使うべきではありません...オブジェクト({})。 JavaScriptオブジェクトは辞書です。配列メソッドは取得できませんが、文字列キーを取得します。これはあなたが望むように聞こえる。 – Zach

1

。このタイプの配列では、各配列メンバーのキーを定義できます。このように配列を使用すると、メンバーをトラバースできるインデックス値がないことを意味します。for (var i in object)を使用できます。

for (var key in test.People["Fred"].Hats) { 
    console.log(key); 
} 
関連する問題