2016-08-01 2 views
1

Ich habe folgende Anordnungen:zwischen zwei Arrays von Objekten mit ES6 oder Typoskript diff Get

arr1 = [{ 
     id: 1, 
     name: 'Diego', 
     age: 23 
    }, { 
     id: 2, 
     name: 'Brian', 
     age: 18 
    }] 

    arr2 = [{ 
     id: 1, 
     name: 'Diego', 
     age: 23 
    }, { 
     id: 2, 
     name: 'Brian', 
     age: 18 
    }, { 
     id: 3, 
     name: 'Pikachu', 
     age: 88 
    }] 

ich zwischen diesen beiden Arrays erhalten Differenz benötigen, das espected Ergebnis ist:

arr3 [{id:3, name: 'Pikachu', age: 88}] 

Wie Ich löse dieses Problem mit ES6 oder TypeScript?

Ich versuchte mit SET, aber hat nicht funktioniert.

+2

Zuerst schreiben oder eine Routine finden, den Unterschied von zwei Sätzen zu nehmen, basierend auf einem gewissen Gleichheit Funktion. Schreiben Sie dann die Gleichheitsfunktion für Ihren Fall. –

+0

Ich dachte darüber nach, aber ich suchte nach einem einfacheren Weg. Ich werde tun, was Sie gesagt haben – DiegoAugusto

Antwort

2

So etwas wie dies vielleicht:

let ids1 = arr1.map(item => item.id); 
let ids2 = arr2.map(item => item.id); 

let diff = ids1.map((id, index) => { 
     if (ids2.indexOf(id) < 0) { 
      return arr1[index]; 
     } 
    }).concat(ids2.map((id, index) => { 
     if (ids1.indexOf(id) < 0) { 
      return arr2[index]; 
     } 
    })).filter(item => item != undefined); 

(code in playground)

+0

Es hat funktioniert, danke :) – DiegoAugusto

Verwandte Themen