On gists
7 ways - Remove Duplicates Array of objects
•
JavaScript
ES 6
duplicates.js
Raw
#
// 0
const obj = [{ id: 1 }, { id: 2 }, { id: 3 }];
obj.forEach((o, i) => {
if (o.id == 2) {
obj.splice(o, 1);
}
});
console.log(obj);
const arr = [
{ id: 1, name: 'Tom' },
{ id: 1, name: 'Tom' },
{ id: 2, name: 'Nick' },
{ id: 2, name: 'Nick' },
];
// 1#
const ids = arr.map(({ id }) => id);
const unique = arr.filter(({ id }, index) =>
!ids.includes(id, index + 1));
// 2#
const unique = arr.filter((obj, index, selfArr) => {
return index === arr.findIndex(o => obj.id === o.id); // arr === selfArr
});
https://bobbyhadz.com/blog/javascript-remove-duplicates-from-array-of-objects
// 3#
const uniqueIds = [];
const unique = arr.filter(element => {
const isDuplicate = uniqueIds.includes(element.id);
if (!isDuplicate) {
uniqueIds.push(element.id);
return true;
}
return false;
});
// [{id: 1, name: 'Tom'}, {id: 2, name: 'Nick'}]
// ✅ If you need to check for uniqueness based on multiple properties
const arr2 = [
{ id: 1, name: 'Tom' },
{ id: 1, name: 'Tom' },
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Nick' },
{ id: 2, name: 'Nick' },
{ id: 2, name: 'Bob' },
];
const unique2 = arr2.filter((obj, index) => {
return index === arr2.findIndex(o => obj.id === o.id && obj.name === o.name);
});
// [
// { id: 1, name: 'Tom' },
// { id: 1, name: 'Alice' },
// { id: 2, name: 'Nick' },
// { id: 2, name: 'Bob' }
// ]
console.log(unique2);
// #4 same as 3# but with Set
const uniqueIds = new Set()
const unique = arr.filter(element => {
const isDuplicate = uniqueIds.has(element.id);
uniqueIds.add(element.id);;
if (!isDuplicate) {
return true;
}
return false;
});
// #5 same as #1
const unique = arr.filter((obj, index) => {
return index === arr.findIndex(o => obj.id === o.id);
});
// #6 same as #5 but with multiple props
const unique2 = arr2.filter((obj, index) => {
return index === arr2.findIndex(o => obj.id === o.id && obj.name === o.name);
});
// last duplicate objects
const unique = arr.filter((obj, index) => {
return index === arr.findLastIndex(o => obj.id === o.id);
});
// Map solution
const arr = [
{ id: 1, name: 'Tom' },
{ id: 1, name: 'Tom' },
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Nick' },
{ id: 2, name: 'James' },
];
function removeDuplicateObjects(arr, property) {
return [...new Map(arr.map(obj => [obj[property], obj])).values()];
}
// [ { id: 1, name: 'Alice' }, { id: 2, name: 'James' } ]
console.log(removeDuplicateObjects(arr, 'id'));
/* Same */
const persons= [
{ id: 1, name: 'John',phone:'23' },
{ id: 2, name: 'Jane',phone:'23'},
{ id: 1, name: 'Johnny',phone:'56' },
{ id: 4, name: 'Alice',phone:'67' },
];
const unique = [...new Map(persons.map((m) => [m.id, m])).values()];
// [
// { id: 1, name: 'Tom' },
// { id: 1, name: 'Alice' },
// { id: 2, name: 'Nick' },
// { id: 2, name: 'James' }
// ]
console.log(removeDuplicateObjects(arr, 'name'));
console.log(unique);