Я создаю приложение с использованием библиотеки ReactJS и пытаюсь понять, как вернуть разницу после сравнения двух массивов.
const a = [8,10,13,14];
const b = [{id: 8}, {id: 13}, {id: 14}];
и то, что я хотел бы получить, это
[10].
Что я пробовал и не работал, так это использовать карту и фильтр вместе.
const newArray = b.map((itemB) => {
return a.filter(
itemA => itemB.id !== itemA,
);
});
Каков простой способ вернуть это?
Спасибо.
Да, отредактировал вопрос. Спасибо за ответ.
Возможный дубликат Как получить разницу между двумя массивами в Javascript?
@ minus.273 Спасибо за комментарий, но я хотел разобраться, когда в массиве есть ключи объекта.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать Лодаш.
const diff = _.difference(a, b.map(({ id }) => id));
Почему бы вам просто не отфильтровать нежелательный идентификатор?
const a = [8, 10, 13, 14];
const b = [{ id: 8 }, { id: 13 }, { id: 14 }];
console.info(a.filter(num => !b.some(({ id }) => id === num)));Поскольку у вас есть два массива с разными типами элементов, вы можете объединить Array.filter() с Array.map(), чтобы получить разницу:
const a = [8,10,13,14];
const b = [{id: 8}, {id: 13}, {id: 14}];
const normalized = b.map(({ id }) => id);
const diff = a.filter(value => !normalized.includes(value));
console.info(diff);Обновлено: я думаю, что решение @Brian Le с .some() более элегантно (и, вероятно, более производительно)!
Гораздо эффективнее делать карту только один раз, вне цикла.
Покажи нам, что ты пробовал. Многочисленными способами вы можете достичь этого. SO не является бесплатной службой написания кода. Цель состоит в том, чтобы помочь вам с вашим кодом