Given an array of objects and the task is to return the unique object by the attribute.
Examples:
Input:
[
{ name: 'Geeks', id: 10 },
{ name: 'GeeksForGeeks', id: 10 },
{ name: 'Geeks', id: 20 },
{ name: 'Geeks', id: 10 }
]
Output:
[
{ name: 'Geeks', id: 10 },
{ name: 'GeeksForGeeks', id: 10 }
]
Approach: Let’s assume that name is an attribute that differentiates the objects and needs the object with a minimum id number if multiple objects exist for the same name. Use the map to store objects and check whether similar objects were seen or not.
- Initialize an empty map.
- Iterate through the array using the filter() method.
- Check if there is any entry in the map with the same name as of current object.
- If true: i.e. there exists an entry with the same name then, check if its id is less than the current object’s id.
- If true: i.e current object’s id is less than the id of the object returned by the map then delete the map entry and enter the current object and return true.
- if false: i.e. id of the current object is greater than the id of the object returned by the map then return false.
- If false: i.e. there is no entry in a map with the same name then enter the current object into the map.
- If true: i.e. there exists an entry with the same name then, check if its id is less than the current object’s id.
- Print unique objects.
Example: In this example, we will extract unique objects by attribute from an array of objects.
javascript
let objects = [{ name: 'Geeks', id: 10}, { name: 'GeeksForGeeks', id: 10}, { name: 'Geeks', id: 20}, { name: 'Geeks', id: 10}];let mymap = new Map();let unique = objects.filter(el => { const val = mymap.get(el.name); if (val) { if (el.id < val) { mymap.delete(el.name); mymap.set(el.name, el.id); return true; } else { return false; } } mymap.set(el.name, el.id); return true;});console.log(unique); |
[ { name: 'Geeks', id: 10 }, { name: 'GeeksForGeeks', id: 10 } ]
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
