Lets say I have an array
['Student', 'Progress', 'Student', 'Area']
I would like to have an object that looks like this…
{ { value: "Student", count: 2 }, { value: "Progress", count: 1 } }
The code I am using currently is this… which clearly is wrong. Any help would be appreciated.
const counts = []; for (let i = 0; i < array.length; i++) { var object = { value: counts[array[i]], count: (1 + (counts[array[i]] || 0)) } counts.push(object); }; return counts;
Advertisement
Answer
You could take an object for counting and map the entries of the object as new object.
const data = ['Student', 'Progress', 'Student', 'Area'], result = Object .entries(data.reduce((r, s) => { r[s] = (r[s] || 0) + 1; return r; }, {})) .map(([value, count]) => ({ value, count })); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }