Skip to content
Related Articles
Get the best out of our app
GFG App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Extract unique objects by attribute from array of objects.

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

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.
  • Print unique objects.

Example: In this example, we will extract unique objects by attribute from an array of objects.

javascript




<script>
    objects = [{
        name: 'Geeks',
        id: 10
    }, {
        name: 'GeeksForGeeks',
        id: 10
    }, {
        name: 'Geeks',
        id: 20
    }, {
        name: 'Geeks',
        id: 10
    }];
     
    let mymap = new Map();
     
    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);
</script>


Output:

[ { name: 'Geeks', id: 10 }, 
  { name: 'GeeksForGeeks', id: 10 } ]

My Personal Notes arrow_drop_up
Last Updated : 19 Dec, 2022
Like Article
Save Article
Similar Reads
Related Tutorials