Skip to content
Related Articles
Open in App
Not now

Related Articles

Extract unique objects by attribute from array of objects.

Improve Article
Save Article
  • Last Updated : 19 Dec, 2022
Improve Article
Save 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
Related Articles

Start Your Coding Journey Now!