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.
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):
Arrays sind Objekte . [3, 0] ist nicht gleich [3, 0], da es sich um verschiedene Objekte handelt. Deshalb schlägt Ihr inArray fehl.
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.
Für die unendliche verschachtelte Suche:
%Vor%Hinweise:
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.
Tags und Links javascript arrays jquery