Сравнение двух массивов объектов по свойству объекта и возращение отличающегося элемента в случае нахождения

Имею два массива объектов, у каждого объекта несколько свойств, некоторые могут пересекаться, но один всегда отличается - ссылка. Не знаю как найти отличающиеся элементы массива объектов по признаку этой ссылки внутри каждого объекта. Входные данные: Массив первый - [{link:'somelink.com/1'}, {link:'somelink.com/2'}, {link:'somelink.com/3'}] , Массив второй - [{link:'somelink.com/1213'}, {link:'somelink.com/234222'}, {link:'somelink.com/1'}] Необходимо получить: [{link: 'somelink.com/1'}]


Ответы (1 шт):

Автор решения: Deonis

До фразы "Необходимо получить" было очевидно, что получить надо все, кроме {link: 'somelink.com/1'}, но желаемый результат сбил с толку. Так что на самом деле вам надо получить в итоге: совпадения значений или наоборот?

В общем, предложу два варианта.

  1. Получаем элементы, при совпадении значений свойств:

const arr1 = [{
  link: 'somelink.com/1'
}, {
  link: 'somelink.com/2'
}, {
  link: 'somelink.com/3'
}];
const arr2 = [{
  link: 'somelink.com/1213'
}, {
  link: 'somelink.com/234222'
}, {
  link: 'somelink.com/1'
}];

const tmp = arr1.map(el => el.link);
const result = arr2.filter(o => tmp.includes(o.link));
console.log(result);

  1. Получаем элементы, значения свойств, которых нет другом масиве

const arr1 = [{
  link: 'somelink.com/1'
}, {
  link: 'somelink.com/2'
}, {
  link: 'somelink.com/3'
}];
const arr2 = [{
  link: 'somelink.com/1213'
}, {
  link: 'somelink.com/234222'
}, {
  link: 'somelink.com/1'
}];

const tmp1 = arr1.map(el => el.link);
const tmp2 = arr2.map(el => el.link);
const result = [...arr1, ...arr2].filter(o => !(tmp1.includes(o.link) && tmp2.includes(o.link)));
console.log(result);

→ Ссылка