2016-08-01 2 views
1

Я следующие массивы:Получить различия между двумя массивами объектов с ES6 или машинописью

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 
    }] 

мне нужно получить разницу между этими двумя массивами, то espected результата:

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

Как Я решаю эту проблему, используя ES6 или TypeScript?

Я пробовал использовать SET, но не работал.

+2

Во-первых, написать или найти процедуру, чтобы взять разность двух множеств, основанный на некоторой функции равенства. Затем напишите функцию равенства для вашего случая. –

+0

Я думал об этом, но им искал более простой способ. Я сделаю, как вы сказали – DiegoAugusto

ответ

2

Что-то вроде этого, может быть:

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

Это сработало, спасибо :) – DiegoAugusto

Смежные вопросы