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)