Javascript indexOf für ein Array von Arrays, die kein Array finden

8

Ich habe ein Array mit verschachtelten Arrays, das so aussieht:

%Vor%

Wenn ich versuche herauszufinden, ob das Array tw ein übergebenes Array enthält, bekomme ich immer ein Ergebnis von -1.

Zum Beispiel:

%Vor%

gibt beide -1 zurück, obwohl das erste Objekt im Array [3,0] ist Wie finde ich heraus, ob ein bestimmtes Array von Arrays in meinem Array enthalten ist?

Oh, und ich habe es bisher nur auf IE9 getestet.

    
joe_coolish 21.04.2012, 15:11
quelle

6 Antworten

10

Das liegt daran, dass Sie nach einem anderen Objekt suchen. indexOf() verwendet strenge Gleichheitsvergleiche (wie der Operator === ) und [3, 0] === [3, 0] gibt false zurück.

Sie müssen manuell suchen. Hier ist ein Beispiel, das eine allgemeinere Funktion indexOf() verwendet, die eine benutzerdefinierte Vergleichsfunktion verwendet (mit einer Verbesserung, die von @ ajax333221 in den Kommentaren vorgeschlagen wird):

%Vor%     
Tim Down 21.04.2012, 15:14
quelle
2

Arrays sind Objekte . [3, 0] ist nicht gleich [3, 0], da es sich um verschiedene Objekte handelt. Deshalb schlägt Ihr inArray fehl.

    
Gwyn Howell 21.04.2012 15:16
quelle
2

Weil Sie zwei verschiedene Instanzen von Arrays vergleichen. Das Vergleichen von Objekten gibt true nur dann zurück, wenn sie dieselbe Instanz sind. Es spielt keine Rolle, ob sie dieselben Daten enthalten.

In Ihrem Fall könnten Sie diesen Ansatz verwenden:

%Vor%

Oder etwas mehr ortodox wie:

%Vor%

Wo die Bedingung eingestellt werden kann, hängt vom Inhalt der Arrays ab.

    
ZER0 21.04.2012 15:26
quelle
2

Für die unendliche verschachtelte Suche:

%Vor%

Hinweise:

  • unterstützt unendlich verschachtelte Arrays
  • behandelt sparse Arrays korrekt
  • verwendet typeof Prüfungen

jsFiddle-Demo

    
ajax333221 21.04.2012 22:55
quelle
0

Dies liegt daran, dass $.inArray und indexOf beide einen flachen Vergleich mit === verwenden.

Da das Array, das Sie übergeben, indexOf nicht exakt das gleiche ist wie das in Ihrem 2D-Array, gibt === false zurück. Sie müssen einen ausführlichen Vergleich durchführen, um das Array richtig zu finden - aus einem kurzen Blick auf die jQuery-Dokumentation ist dies dort nicht verfügbar.

    
robbrit 21.04.2012 15:17
quelle
0

Warum nicht einfach bleiben?

%Vor%     
dragonfire 14.05.2015 02:16
quelle

Tags und Links