Array-Objekt tief Vergleich mit lodash
Ich habe 2 array von Objekten, die würde ich zutiefst vergleichen mit lodash
Allerdings hab ich ein prob:
> var x = [{a:1, b:2}, {c:3, d:4}];
> var y = [{b:2, a:1}, {d:4, c:3}];
> _.difference(x,y, _.isEqual);
[ { a: 1, b: 2 }, { c: 3, d: 4 } ]
Wie soll ich vergleichen, um zu sehen, dass beide gleich sind?
- Array von arrays möglich ist, zu Sortieren. Array von Objekten ist nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Gebrauch machen von differenceWith() mit einem isEqual() Komparator, und rufen Sie isEmpty um zu überprüfen, ob Sie gleich sind oder nicht.
JS:
HTML:
UPDATE 22. Juni 2018
Dieses update ist eine Reaktion auf den Kommentar unten:
Wie gesagt in der
differenceWith
Dokumentation:Dies bedeutet, dass, solange alle Elemente des ersten Arrays entsprechen, alles andere in der zweiten Reihe, dann das resultierende array aus der
differenceWith
Aufruf leer.Eine alternative Lösung, die wirklich das problem löst, ist die Verwendung
xorWith()
mit der gleichen Kette von Funktionen aus der Lösung oben.JS:
CSS:
HTML:
diff
zwischen Ihnen, so_.difference
sollte einfach ersetzt mit_.differenceWith
mit_.isEqual
Komparator._(foo)
irgendwo erwähnt lodash. Wo ist das in den docs?_(x)
mit einzeln installierten Komponenten, da brauche ich nicht die ganzelodash
? Ich fandlodash.isequal
(ienpm i --save lodash.isequal
),lodash.xorwith
,lodash.isequal
,lodash.isempty
, aber ich weiß nicht, was zu installieren, für_(x)
.isEmpty(xorWith(x, y, isEqual))
Bevorzuge ich Reine JS-da habe ich noch nicht die Geduld, zu lernen, Unterstrich oder lodash. Also ich erfinde etwas, was ich schon lange geträumt. Die
Object.prototype.compare()
. Die v0.0.2 ist dabei nur seicht Vergleich, aber ausreichend für diese Frage.JS:
Cool... So lässt sich dann weiter mit der Frage... ich denke mal... da haben wir schon ein
Object.prototype.compare()
sollte es absolut keinen Schaden bei der Erfindung vonArray.prototype.compare()
. Wir machen es cleverer dieser Zeit. Es soll sagen, primitiven Objekten. Eine andere Sache ist, arrays geordnet sind, also in meinem Buch[1,2]
ist nicht gleich[2,1]
. Auch dies macht die Arbeit einfacher.JS:
new Object({a:1, b:2, c:3}).compare({c:3,b:2,a:1,d:0});
zurücktrue
sein, sollte aberfalse
Gleichen Probleme mit deep-Objekt-Vergleich. Ich würde es vorziehen, vorhandenelodash
Lösung.Object.keys().length
Bühne.Array.prototype.compare()
lodash
. Es ist, was es für entworfen wurde.Folgende @ryeballar Antwort, wenn Sie nur wollen, zu importieren lodash Methoden können Sie verwenden Sie diese Schreibweise: