Вы можете достичь этого в ванили javascript, используя метод Array.reduce
. Сначала сгруппируйте данные по идентификатору, затем разделите группы на уникальные и повторяющиеся массивы. Если в вашей группе есть только один элемент, элемент уникален или если в группе более одной записи, содержащиеся в ней записи являются дубликатами.
const originialData = [
{id: 1, description: 'abc' },
{id: 2, description: 'def' },
{id: 1, description: 'ghi' },
{id: 3, description: 'jkl' },
{id: 2, description: 'mno' },
{id: 4, description: 'pqr' }
]
// Group data as an object by using the Array.reduce method.
const groupedById = originialData.reduce((groups, item) => {
// if a group has not yet been created, default to empty array.
if (!groups[item.id]) {
groups[item.id] = [];
}
// push the entry into the group
groups[item.id].push(item);
return groups;
}, {});
// Get the group keys
const groupKeys = Object.keys(groupedById);
// Iterate the group keys, and divide into unique and duplicates array
const [unique, duplicates] = groupKeys.reduce(([uniq, dupl], id) => {
// Get the current group
const group = groupedById[id];
// Select array depending on length
if (group.length === 1) { // if length is 1, then the item is unique
uniq = uniq.concat(group);
} else { // else the containing items are duplicates.
dupl = dupl.concat(group);
}
return [uniq, dupl];
}, [[], []])
console.log(unique)
Рабочий пример здесь: https://jsbin.com/sijidacile/edit?js, консоль