Я хочу отфильтровать массив объектов по другому массиву объектов.
У меня есть 2 массива таких объектов:
const array = [
{ id: 1, name: 'a1', sub: { id: 6, name: 'a1 sub' } },
{ id: 2, name: 'a2', sub: null },
{ id: 3, name: 'a3', sub: { id: 8, name: 'a3 sub' } },
{ id: 4, name: 'a4', sub: null },
{ id: 5, name: 'a5', sub: { id: 10, name: 'a5 sub' } },
];
const anotherArray = [
{ id: 1, name: 'a1', sub: { id: 6, name: 'a1 sub' } },
{ id: 2, name: 'a2', sub: null },
{ id: 5, name: 'a5', sub: { id: 10, name: 'a5 sub' } },
];
и я хочу отфильтровать array
от anotherArray
и вернуть элементы, которые не существуют в anotherArray и имеют sub.
Итак, мой желаемый результат:
[ { id: 3, name: 'a3', sub: { id: 8, name: 'a3 sub' } ]
Примечание: я сделал это с циклом for, но он работает слишком медленно.Я хочу сделать это с помощью метода фильтра массива
Код, который я имею с для цикла:
for (let i = 0; i < array.length; i += 1) {
let exist = false;
const item = array[i];
for (let j = 0; j < anotherArray.length; j += 1) {
const anotherItem = anotherArray[j];
if (item.id === anotherItem.id) {
exist = true;
}
}
if (item.sub && !exist) {
this.newArray.push({
text: `${item.sub.name} / ${item.name}`,
value: item.id,
});
}
}