Ich habe zwei Arrays von JavaScript-Objekten, die ich vergleichen möchte, um festzustellen, ob sie identisch sind. Die Objekte befinden sich möglicherweise nicht in jedem Array in derselben Reihenfolge (und werden dies höchstwahrscheinlich auch nicht tun). Jedes Array sollte nicht mehr als 10 Objekte enthalten. Ich dachte, jQuery könnte eine elegante Lösung für dieses Problem haben, aber ich konnte online nicht viel finden.
Ich weiß, dass eine brutal verschachtelte $.each(array, function(){})
Lösung funktionieren könnte, aber gibt es eine integrierte Funktion, die mir nicht bekannt ist?
Vielen Dank.
[0,1] == {0:0,1:1,length=2}
$(arr1).not(arr2).length == 0
ist nicht genugnot
es sich um eine Filterfunktion und nicht um eine Gleichheitsfunktion handelt. Probieren Sie es mit[1,2]
und[1]
. In einer Reihenfolge erhalten Sie[]
und in einer anderen erhalten Sie[2]
.not
funktioniert ab 3.0.0-rc1 nicht mehr mit generischen Objekten. Siehe github.com/jquery/jquery/issues/3147Ich habe heute auch danach gesucht und Folgendes gefunden: http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256BFB0077DFFD
Ich weiß nicht, ob dies eine gute Lösung ist, obwohl einige Leistungsaspekte berücksichtigt werden.
Ich mag die Idee einer jQuery-Hilfsmethode. @ David Ich würde lieber sehen, dass Ihre Vergleichsmethode wie folgt funktioniert:
Es macht für mich keinen Sinn, Folgendes zu tun:
wobei a und b Arrays sind. Normalerweise würden Sie beim $ (etwas) eine Auswahlzeichenfolge übergeben, um mit DOM-Elementen zu arbeiten.
Auch in Bezug auf das Sortieren und "Zwischenspeichern" der sortierten Arrays:
Es scheint, dass wir die Arrays kopieren müssen, bevor wir daran arbeiten. Die beste Antwort, die ich finden konnte, um das auf jQuery-Weise zu tun, war von niemand anderem als John Resig hier auf SO! Was ist der effizienteste Weg, um ein Objekt in JavaScript tief zu klonen? (Siehe Kommentare zu seiner Antwort für die Array-Version des Objektklonrezepts)
In diesem Fall denke ich, wäre der Code dafür:
quelle
Mein Ansatz war ganz anders: Ich habe beide Sammlungen mit JSON.stringify abgeflacht und einen normalen Zeichenfolgenvergleich verwendet, um die Gleichheit zu überprüfen.
Dh
NB: Bitte beachten Sie, dass seine Methode davon ausgeht, dass beide Sammlungen auf ähnliche Weise sortiert sind. Andernfalls würden Sie ein falsches Ergebnis erhalten!
quelle
Konvertieren Sie beide Arrays in Zeichenfolgen und vergleichen Sie sie
quelle
Ich fand diese Diskussion, weil ich einen Weg brauchte, um Arrays und Objekte gründlich zu vergleichen. Anhand der Beispiele hier habe ich Folgendes gefunden (der Klarheit halber in drei Methoden unterteilt):
Testen
quelle
In meinem Fall enthalten verglichene Arrays nur Zahlen und Zeichenfolgen . Diese Lösung hat bei mir funktioniert:
Lass es uns testen!
quelle
Ich glaube nicht, dass es eine gute "jQuery" -Methode gibt, aber wenn Sie Effizienz benötigen, ordnen Sie eines der Arrays einem bestimmten Schlüssel (einem der eindeutigen Objektfelder) zu und führen Sie dann einen Vergleich durch, indem Sie das andere Array durchlaufen und Vergleich mit der Karte oder dem assoziativen Array, das Sie gerade erstellt haben.
Wenn Effizienz kein Problem ist, vergleichen Sie einfach jedes Objekt in A mit jedem Objekt in B. Solange | A | und | B | klein sind, solltest du okay sein.
quelle
Wenn Sie nur den Inhalt von Arrays vergleichen möchten, gibt es eine nützliche jQuery-Funktion $ .inArray ()
quelle
Ändern Sie das Array in Zeichenfolge und vergleichen Sie
quelle
Der nette Einzeiler von Sudhakar R als globale jQuery-Methode.
quelle
Ich fand dies auch, als ich nach Array-Vergleichen mit jQuery suchte. In meinem Fall hatte ich Strings, von denen ich wusste, dass sie Arrays sind:
Aber es war mir wichtig, ob es sich um ein vollständiges oder nur ein teilweises Spiel handelte, also habe ich Folgendes verwendet, basierend auf der Antwort von Sudhakar R:
quelle
Wenn Duplikate so wichtig sind, dass
[1, 1, 2]
sie nicht gleich,[2, 1]
aber gleich sein sollten[1, 2, 1]
, finden Sie hier eine Referenzzähllösung:Hier ist die Geige zum Spielen .
quelle
quelle
Versuche dies
quelle