2012-02-14 14 views
3

私は、このセットアップがあるとします。連想配列の連想配列上のforeachの実行

var whatever = new Array(); 

whatever["a"] = new Array(); 
whatever["a"]["a"] = "test1"; 
whatever["a"]["b"] = "test2"; 

whatever["b"] = new Array(); 
whatever["b"]["a"] = "test3"; 
whatever["b"]["b"] = "test4"; 

を、私はそれを反復処理しようとすると:

$.each(whatever, function(key, value) { 
$.each(value, function(subkey, subvalue) { 
    //stuff with key, subkey, and subvalue here 
}); 
}); 

しかし、反復は失敗し、ネストされたをコメントアウトforeachループはページを読み込むことができるので、問題がどこにあるかが分かります。最初のループ内

、私のような何かを行うことができます。

alert(value["a"]); 

をし、「有効」のアレイのようですので、適切な値を受け取ります。ネストされたループは基本的に外側のループと同じなので、どこが間違っていますか?

+0

正確にどのようなあなたはこれをやろうとしていますか?ほとんどの場合、オブジェクトはネストされた配列よりも優れています。 – elclanrs

+0

Javascript配列は決して結合的ではなく、文字列をキーとして持つことはできません。 Javascript配列は数値的に索引付けされます。あなたが探しているのは、キー値ストアであるオブジェクトです。 – deceze

+0

@deceze javascript配列は数値文字列をキーとする単なるオブジェクトであり、オブジェクトを使用する方が良いと言われています。 – Esailija

答えて

3

配列の代わりにオブジェクトを使用します。

var whatever = {}; 

whatever["a"] = {}; 
whatever["a"]["a"] = "test1"; 
whatever["a"]["b"] = "test2"; 

whatever["b"] = {}; 
whatever["b"]["a"] = "test3"; 
whatever["b"]["b"] = "test4"; 

http://jsfiddle.net/QwT8W/

+1

それはばかげて簡単でした。おっとっと。ありがとう! – user173342