Это можно записать просто:
const
list = [
{ id: 1, name: 'test1' },
{ id: 2, name: 'test2' },
{ id: 3, name: 'test3' },
{ id: 2, name: 'test2' }
],
uniqueList = list.reduce((arr, { id, name }) =>
arr.concat({
id,
name,
...arr.some(item => id === item.id) && { duplicate: true, name: `${name}_${id}` }
}), []);
console.log(uniqueList);
Проблема заключалась в том, что когда вы вызывали includes
, вы фактически искали объект, указатель которого существует в массиве. Чтобы найти объект, свойство которого совпадает с запрашиваемым свойством, у вас нет другого выбора, кроме как использовать такие функции, как some
или every
, которые отличаются от includes
- вы можете отправить им обратный вызов, а не просто объект.