Sehen Sie sich dieses Codebeispiel an oder gehen Sie zur jsfiddle
%Vor% Ich hätte erwartet, dass beide Tests a === b
ausgeben, aber nur die erste. Der zweite gibt a != b
aus. Kann jemand dieses Verhalten erklären? Wie kann ich Arrays in Javascript effizient vergleichen?
JavaScript-Array-Vergleiche, wie Sie sie geschrieben haben, sind nur einfache Objektreferenzvergleiche. Sie sind nicht "tiefe" Vergleiche Element für Element.
Sie können Ihre eigene Vergleichsfunktion schreiben, um zu überprüfen, ob die Längen gleich sind und ob die Elemente der Reihe nach gleich sind oder nicht, je nach Ihren Bedürfnissen. edit Wie andere zeigen, gibt es mehrere Bibliotheken, die Array-Vergleichsfunktionen enthalten. Wenn Sie eine finden, die Ihrer Definition von "Gleichheit" entspricht (nicht unwahrscheinlich), und es Ihnen nichts ausmacht, diese Bibliothek in Ihre Architektur zu integrieren, könnte das eine gute Idee sein.
Sie können die isEqual-Methode der Underscore.js-Bibliothek verwenden.
%Vor%Führt einen optimierten tiefen Vergleich zwischen den beiden Objekten aus Bestimmen Sie, ob sie als gleich anzusehen sind.
Lodash ist inspiriert von Unterstreichung, aber heutzutage ist überlegene Lösung
%Vor%Führt einen optimierten tiefen Vergleich zwischen den beiden Objekten aus Bestimmen Sie, ob sie als gleich anzusehen sind.
Verwenden Sie lodash .
%Vor%Funktioniert auch mit Objekten.
%Vor% Arrays sind Objekte in Javascript. Und das Vergleichen von Objekten kann nicht mit ==
erfolgen, wie Sie es normalerweise beim Vergleich von Zeichenfolgen oder Zahlen verwenden würden.
Es gibt viele andere Möglichkeiten, Arrays zu vergleichen. Am liebsten verwende ich JSON:
%Vor% Beachten Sie, dass das Zuweisen eines bereits vorhandenen Objekts zu einer Variablen, wie Sie es tun, wenn Sie b = a
schreiben, nur einen Verweis kopiert. Sie zeigen beide auf das gleiche Array.
Sie müssten b = a.slice()
eingeben, um eine echte Kopie zu erhalten.
Tags und Links javascript arrays comparison