2009-09-15 18 views
8

Wie lautet die Syntax für indexOf(), um ein mehrdimensionales Array zu durchlaufen? Zum Beispiel:indexOf-Syntax für mehrdimensionale Arrays?

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

x.indexOf(a) // ?? 

I 'a' und etwas zu tun mit 'b' finden möchte. Aber es funktioniert nicht ... Da diese Methode selbst iterativ sein sollte, nehme ich nicht an, eine andere Iteration wäre eine gute Sache. Derzeit simuliere ich dies mit 2 einfachen Arrays, aber ich denke, das sollte irgendwie auch funktionieren ...

+0

Sie versuchen, ein Wörterbuch erstellen? Warum nicht ein Objekt benutzen? '{}' – Joel

+0

Hat einer der vier Vorschläge, dies anders zu kodieren, für dich funktioniert? Nur neugierig. – dlamblin

Antwort

0

JavaScript hat keine mehrdimensionalen Arrays als solche, so dass x nur ein Array ist. Auch die indexOf-Methode von Array wird nicht in allen Browsern unterstützt, insbesondere IE (bis mindestens Version 7), nur in JavaScript 1.6 eingeführt.

Sie können nur manuell suchen, indem Sie über x iterieren und jedes Element der Reihe nach untersuchen.

1

Es sei denn, Sie Auftrag erhalten wollen, ist es viel einfacher, ein Wörterbuch zu verwenden:

var x = {}; 

// do something 

x[a] = b; 

Sie können immer noch die Schlüssel iterieren, obwohl die Reihenfolge nicht definiert ist:

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

Verwenden Sie x [a] anstelle von x.a. "a" ist nicht der Schlüsselname, sondern die Variable, die den Schlüssel enthält. –

+0

wahr. Ich werde das reparieren. –

0
x[ x.indexOf(a) ] 

Dies funktioniert nur mit geordneten Objekten/Listen und nur wenn Array.prototype.indexOf definiert ist.

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

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

Ich habe es versucht, es funktioniert nicht aus irgendeinem Grund ... – jirkap

+0

Nun, Sie müssen es anders gemacht haben, weil die Art, wie ich es getan habe. Ich habe festgestellt, dass dies * nur * auf Arrays funktioniert, die numerisch geordnet sind und eine Längeneigenschaft haben, NICHT auf "multidimensionalen" oder Wörterbüchern. –

+0

Hinweis - Sie müssen auch einen Verweis auf das ursprüngliche Objekt für die Referenz haben, die Sie an 'b' übergeben, ein ähnliches Objekt mit ähnlichen Eigenschaften ist immer noch anders. –

1

Sie könnten ein Objekt (oder ein Wörterbuch) verwenden, wie Philippe Leybaert vorgeschlagen hat. Der schnellen Zugriff auf Elemente ermöglichen:

var x = {}; 

x[a] = b; // to set 

alert(x[a]) // to access 

Aber wenn Sie darauf bestehen, indexOf auf verwenden, gibt es noch eine Möglichkeit, aber hässlich es ist:

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

einfach: indexOf() nicht auf diese Weise arbeiten. Es könnte funktionieren, wenn Sie so etwas getan haben:

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

x.indexOf(z); 

Aber dann hätten Sie schon z.b Sie nicht? Also, wenn Sie müssen den Rat von jeder ignorieren, der denkt, dass ein Objekt (oder Wörterbuch) ist eigentlich einfacher werden Sie haben entweder Ates Goral ‚s approach oder suchen Sie verwenden für den Index selbst:

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 
Verwandte Themen