Как из двух массивов получить те объекты, которые есть в одном и отсутствуют в другом?

Есть два массива:

const defaultCass = [
  {id: 15006, name: 'test'},
  {id: 15007, name: 'test'},
  {id: 15012, name: 'test'},
]

const allCass = [
  {id: 15006, name: 'test'},
  {id: 15007, name: 'test'},
  {id: 15008, name: 'test'},
  {id: 15009, name: 'test'},
  {id: 15010, name: 'test'},
  {id: 15011, name: 'test'},
  {id: 15012, name: 'test'},
]

Надо получить:

const result = [
  {id: 15008, name: 'test'},
  {id: 15009, name: 'test'},
  {id: 15010, name: 'test'},
  {id: 15011, name: 'test'}
]

Массивы более чем по 1500 объектов, желательно оптимальный вариант по производительности.
  • Вопрос задан
  • 168 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const diff = (arr1, arr2, key = n => n) =>
  arr1.filter(function(n) {
    return !this.has(key(n));
  }, new Set(arr2.map(key)));


const result = diff(allCass, defaultCass, n => n.id);
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Составить массив id, которые нужно исключить
const excludeIds = defaultCass.map(item => item.id);


Затем отфильтровать, оставив только те, чей id отсутствует в excludeIds
const result = allCass.filter(item => !excludeIds.includes(item.id));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы