Вы не должны использовать filter
, потому что вам нужен выходной массив с тем же количеством элементов, с которого вы начали - вместо этого используйте map
, чтобы создать новый массив с тем же количеством элементов, что и у исходного массива., только преобразованный.
Так как a2
не имеет никакой новой информации, он полезен только для демонстрации существования или отсутствия некоторых объектовметод с низкой сложностью будет иметь значение от map
a2
до Set
из id
с, а затем генерировать новые объекты путем итерации по a1
и проверки, находятся ли их id
в Set
:
let a1 = [{id: 1, name: "terror"}, {id: 2, name: "comics"}, {id: 3, name: "suspense"}]
let a2 = [{id: 1, name: "terror"}, {id: 3, name: "suspense"}]
const a2IDs = new Set(a2.map(({ id }) => id));
const output = a1.map((item) => ({ ...item, selected: a2IDs.has(item.id) }));
console.log(output);
Можно исправить ваш код так, чтобы он работал, изменив .filter
на .map
и используя .find
как есть, но это будетимеют большую сложность, потому что он должен будет перебирать элементы в a2
каждый раз (Set
поисков для сравнения O(1)
).