const users = [ { id: 60, name: "roger" }, { id: 60, name: "roger" }, { id: 60, name: "roger" }, { id: 24, name: "fabio" }, { id: 24, name: "fabio" }, { id: 30, name: "guilherme" }, { id: 60, name: "roger" } ]; /** * Returns a unique array by prop name * @param {array} array - array that will be compared * @param {string} compareProp - property that will be compared across the array * @returns new array of objects with uniques and a new prop with number of occurrences * @example: * const users = [{name: 'roger', id: 1}, {name: 'roger', id: 1}, {name: 'matheus', id: 2}]; * getUniques(users, 'id'); * // [{name: 'roger', id: 1, count: 2}, {name: 'matheus', id: 2, count: 1}] */ const getUniques = (array, compareProp) => { let byId = {}; let uniques = []; let i = 0; let item = {}; for (i; i < array.length; i++) { item = array[i]; if (byId[item[compareProp]]) { byId[item[compareProp]].count++; } else { byId[item[compareProp]] = item; uniques.push(item); item.count = 1; } } return uniques; }; console.table(getUniques(users, 'id'));