2009-09-15 5 views
8

indexOf()が多次元配列を通過する構文は何ですか?例えば :多次元配列のindexOf構文ですか?

var x = []; 
// do something 
x.push([a,b]); 

x.indexOf(a) // ?? 

私は 'a' を見つけると 'b' が何かをしたいです。しかし、うまくいきません...このメソッド自体は反復的なものでなければならないので、他の繰り返しを使うのは良いことではありません。現在、私は2つの単純な配列を使ってこれをシミュレートしていますが、何とか動作するはずです。

+0

あなたがしようとしています辞書を作成するには?なぜオブジェクトを使用しないのですか? '{}' – Joel

+0

これをコーディングするための4つの提案のいずれかが違うのですか?ちょっと興味があるんだけど。 – dlamblin

答えて

0

JavaScriptには多次元配列がありませんので、xは単なる配列です。また、配列のindexOfメソッドは、すべてのブラウザ、特にIE(バージョン7まで)でサポートされているわけではなく、JavaScript 1.6でのみ導入されています。

あなたの唯一の選択肢は、手動で検索し、xを反復し、各要素を順番に調べることです。

1

あなたが順序を保持する場合を除き、それは辞書を使用することがはるかに簡単です:

var x = {}; 

// do something 

x[a] = b; 

順序が定義されていないが、あなたはまだ、キーを反復処理することができます。

for (var key in x) { 
    alert(x[key]); 
} 
+0

x.aの代わりにx [a]を使用します。 "a"はキー名ではなく、キーを保持する変数です。 –

+0

が真です。私はそれを修正します。 –

0
x[ x.indexOf(a) ] 

これは、順序付けされたオブジェクト/リストおよびArray.prototype.indexOfが定義されている場合にのみ機能します。

x = [1,2], b = {one:function(){alert('gj')}}, c = x.push(b); 

x[ x.indexOf(b) ]['one']() 
+0

私はこれを試しました、それは何らかの理由でうまくいかない... – jirkap

+0

私はそれがうまくいったので、まあ、あなたは違ったやり方だったのでしょうか。この* ONLY *は、数値的に順序付けされ、長さのプロパティを持つ配列で、 "多次元"や辞書ではないことに注意しました。 –

+0

注 - 同様のプロパティを持つ同様のオブジェクトは、 'b'に供給している参照用の元のオブジェクトへの参照も必要です。 –

1

Philippe Leybaertが提案したように、オブジェクト(または辞書)を使用できます。それが要素に迅速にアクセスできるようになります:

var x = {}; 

x[a] = b; // to set 

alert(x[a]) // to access 

をしかし、あなたはindexOfを使用して主張すれば、道はまだあります、しかし醜いそれは次のとおりです。

var x = []; 

var o = Object(a); // "cast" to an object 
o.b = b; // attach value 

x.push(o); 

alert(x.indexOf(a)); // will give you the index 
alert(x[1].b); // access value at given index 
3

単に:indexOf()は、このように動作しません。

var x = []; 
// do something 
z = [a,b]; 
x.push(z); 

x.indexOf(z); 

しかし、あなたはすでにz.bを持っていますか?だから、あなたがオブジェクト(または辞書)を使用して実際に簡単にあなたがAtes Goralapproachを使用し、またはインデックスを自分で検索するか必要がありますだと思いますみんなのアドバイスを無視しなければならない場合:

Array.prototype.indexOf0 = 
    function(a){for(i=0;i<this.length;i++)if(a==this[i][0])return i;return null;}; 
var x = []; 
// do something 
x.push([a,b]); 

x.indexOf0(a); //=> 0