Даже если вы не предоставили какой-либо (ошибочный) код от себя, я понимаю, что иногда бывает даже трудно начать с такой вещи.
В этом случае вам следует найти начальную точку. Вы можете использовать исходный массив (arr1
) в качестве отправной точки или arr2
. Если arr2
крошечный, это быстрее использовать в качестве отправной точки. Чем больше значение arr2, тем больше вы можете начать с arr1
, поскольку это решение более читабельно (субъективно).
С arr2
в качестве отправной точки вы можете использовать метод forEach
, в сочетании с find
:
arr2.forEach((item) => {
const target = arr1.find(({ id }) => item.id === id);
if (target) {
target.status = true;
}
});
Используя arr1
в качестве отправной точки, вы можете использовать метод map
. Это создаст новый массив на месте, что обычно хорошо, учитывая систему обнаружения изменений angular:
arr1 = arr1.map((item) => ({
...item,
status: arr2.some(({ id }) => item.id === id)
});
Это также создаст новую ссылку на объект. В зависимости от вашего набора данных производительность может быть проблемой, но это будет заметно только при обработке +10 000 объектов (в зависимости от сложности ваших объектов).
Если вы не хотите status: true
переписать в false
на arr1
, необходимо добавить дополнительное условие:
arr1 = arr1.map((item) => ({
...item,
status: item.status || arr2.some(({ id }) => item.id === id)
});