Можно сгруппировать по таким свойствам, как type
и id
, а затем проверить, превышает ли names
1
. Если да, это означает, что есть хотя бы один дубликат:
const result = [...arr.reduce((r, o) => {
const key = o.type + '-' + o.id;
const item = r.get(key) || Object.assign({}, o, {
names: []
});
item.names.push(o.name);
return r.set(key, item);
}, new Map).values()];
Пример:
let arr = [{type: 1, id: 1, name:'aa'},{type: 1, id: 1, name:'bb'},{type: 2, id: 1, name:'cc'}]
const result = [...arr.reduce((r, o) => {
const key = o.type + '-' + o.id;
const item = r.get(key) || Object.assign({}, o, {
names: []
});
item.names.push(o.name);
return r.set(key, item);
}, new Map).values()];
console.log(`Is there duplicates: `, result.some(s => s.names.length > 1));