Get unique objects from an array
Jesús Velázquez
Posted on November 23, 2021
Suppose you have an array of objects with at least one common property that could be used as an identifier.
This function will allow you to create a new array with unique objects based on the selected property:
function getUniqueElementsFromArray(array, uniqueProperty) {
const result = [];
// The map will help us keep a record of the objects
const map = new Map();
array.forEach((item, i) => {
if (!map.has(item[uniqueProperty])) {
// New element, push it into results
map.set(item[uniqueProperty], true); // you can set any value, we just need it to be in the Map
// save unique object
result.push(item);
}
});
return result;
};
Example:
Let's say we have an array:
const sample = [
{name: 'a', points: 20, game: 1},
{name: 'e', points: 5, game: 3},
{name: 'a', points: 15, game: 3},
{name: 'i', points: 5, game: 3},
{name: 'e', points: 50, game: 1},
{name: 'a', points: 0, game: 5},
{name: 'o', points: 100, game: 2},
{name: 'e', points: 20, game: 2},
{name: 'u', points: 20, game: 1},
{name: 'i', points: 50, game: 2},
]
We can use the property 'name'
as identifier
console.log(getUniqueElementsFromArray(sample, 'name'))
And the result will yield:
[
{ name: 'a', points: 20, game: 1 },
{ name: 'e', points: 5, game: 3 },
{ name: 'i', points: 5, game: 3 },
{ name: 'o', points: 100, game: 2 },
{ name: 'u', points: 20, game: 1 }
]
Adding here a typescript version:
export const getUniqueItems = (array: any[], uniqueProperty: string): any => {
const result: any[] = []
const map = new Map()
array.forEach((item) => {
if (!map.has(item[uniqueProperty])) {
map.set(item[uniqueProperty], true)
result.push(item)
}
})
return result
}
💖 💪 🙅 🚩
Jesús Velázquez
Posted on November 23, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.