2017-06-09 5 views
1

Ich habe folgende Plunkr, die perfekt funktioniert.Finden Sie den Unterschied zwischen zwei Arrays

https://plnkr.co/edit/WDjoEK7bAVpKSJbAmB9D?p=preview

Es nutzt die _.differenceWith() Funktion der lodash, zwei, um alle Array-Werte speichern, die nicht von den beiden Arrays enthalten sind.

var result = _.differenceWith(data, test, _.isEqual); 

Jetzt habe ich zwei Probleme:

1.) In unserem Projekt haben wir eine ältere Lodash Version verwenden, bei denen die Funktion differenceWith nicht

implementiert

2.) ich nur einen Wert vergleichen brauchen des Arrays. Dies vergleicht derzeit die vollständigen Objekte. Ich muss nur die ID-Eigenschaft vergleichen.

+0

'_.filter (arr, x => x.id = "etwas")' – dandavis

+0

Die Plunkr funktioniert nicht perfekt . Es heißt 'ReferenceError: _ ist nicht definiert'. Was sind deine tatsächlichen Daten? Die gezeigten Daten haben keine 'id'-Eigenschaft. –

+0

Omg so so leid, irgendwie gab es einen Fehler. Ich habe es aktualisiert. Sollte jetzt funktionieren: / – user5417542

Antwort

2

Dies findet die Objekte in arr1, die nicht in arr2 sind, basierend auf dem id Attribut.

var arr1 = [ { "id": "1" }, { "id": "2" }, { "id": "3" } ]; 
 
var arr2 = [ { "id": "1" }, { "id": "2" } ]; 
 
var result = arr1.filter(o1 => arr2.filter(o2 => o2.id === o1.id).length === 0); 
 
console.log(result);

Beachten Sie, dass dieses Beispiel nicht lodash erfordert. Wenn Sie einen anderen Vergleich anstelle von id verwenden möchten, können Sie den o2.id === o1.id Teil in eine andere Eigenschaft ändern.

hier eine allgemeinere Lösung ist:

var arr1 = [ { "name": "a" }, { "name": "b" }, { "name": "c" } ]; 
 
var arr2 = [ { "name": "a" }, { "name": "c" } ]; 
 
function differenceWith(a1, a2, prop) { 
 
    return a1.filter(o1 => a2.filter(o2 => o2[prop] === o1[prop]).length === 0); 
 
} 
 
var result = differenceWith(arr1, arr2, 'name'); 
 
console.log(result);

Verwandte Themen