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
}
Top comments (0)