Wie kann ich prüfen, ob Arrays in Javascript gleich sind?

8

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?

    
Shawn 07.10.2012, 15:59
quelle

4 Antworten

2

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.

    
Pointy 07.10.2012, 16:00
quelle
25

Sie können die isEqual-Methode der Underscore.js-Bibliothek verwenden.

Ссылка

  

Führt einen optimierten tiefen Vergleich zwischen den beiden Objekten aus   Bestimmen Sie, ob sie als gleich anzusehen sind.

%Vor%

AKTUALISIEREN

Lodash ist inspiriert von Unterstreichung, aber heutzutage ist überlegene Lösung

Ссылка

  

Führt einen optimierten tiefen Vergleich zwischen den beiden Objekten aus   Bestimmen Sie, ob sie als gleich anzusehen sind.

%Vor%     
RKumsher 07.10.2012 16:05
quelle
12

Verwenden Sie lodash .

%Vor%

Funktioniert auch mit Objekten.

%Vor%     
Stefan Kendall 07.10.2012 16:10
quelle
6

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.

    
David 07.10.2012 16:00
quelle

Tags und Links