Open In App

Extract unique objects by attribute from array of objects

Improve
Improve
Like Article
Like
Save
Share
Report

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.

Python




# Given JavaScript code to filter unique objects based on 'name' with the minimum 'id'
objects = [
    {"name": "Geeks", "id": 10},
    {"name": "GeeksForGeeks", "id": 10},
    {"name": "Geeks", "id": 20},
    {"name": "Geeks", "id": 10}
]
 
# Initialize an empty dictionary to store the minimum 'id' for each 'name'
mymap = {}
 
# Initialize an empty list to store unique objects
unique = []
 
# Loop through each object in the 'objects' array
for el in objects:
    # Check if 'name' is already in the dictionary
    if el["name"] in mymap:
        # If yes, compare the current 'id' with the stored minimum 'id'
        if el["id"] < mymap[el["name"]]:
            # If the current 'id' is smaller, update the minimum 'id' in the dictionary
            mymap[el["name"]] = el["id"]
            # Add the current object to the list of unique objects
            unique.append(el)
    else:
        # If 'name' is not in the dictionary, add it with the current 'id'
        mymap[el["name"]] = el["id"]
        # Add the current object to the list of unique objects
        unique.append(el)
 
# Print the list of unique objects
print(unique)


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);


Output

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



Last Updated : 08 Dec, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads