Skip to content

# How can I group and count values in a JavaScript array?

Finding the count of each value in an array can come in handy in a lot of situations. It's also fairly straightforward to implement, both for primitive and complex values, using JavaScript's Array methods.

## Count the occurrences of each value in an array

You can use Array.prototype.reduce() to create an object with the unique values of an array as keys and their frequencies as the values. Use the nullish coalescing operator (??) to initialize the value of each key to 0 if it doesn't exist and increment it by 1 every time the same value is encountered.

const frequencies = arr =>
arr.reduce((a, v) => {
a[v] = (a[v] ?? 0) + 1;
return a;
}, {});

frequencies(['a', 'b', 'a', 'c', 'a', 'a', 'b']);
// { a: 4, b: 2, c: 1 }
frequencies([...'ball']);
// { b: 1, a: 1, l: 2 }

## Group the elements of an array based on a function

You can also group the elements of an array based on a given function and return the count of elements in each group. This can be useful when you want to group elements based on a specific property or a function.

To do so, you can use Array.prototype.map() to map the values of an array to a function or property name, and then use Array.prototype.reduce() to create an object, where the keys are produced from the mapped results.

const countBy = (arr, fn) =>
arr
.map(typeof fn === 'function' ? fn : val => val[fn])
.reduce((acc, val) => {
acc[val] = (acc[val] || 0) + 1;
return acc;
}, {});

countBy([6.1, 4.2, 6.3], Math.floor);
// {4: 1, 6: 2}
countBy(['one', 'two', 'three'], 'length');
// {3: 2, 5: 1}
countBy([{ count: 5 }, { count: 10 }, { count: 5 }], x => x.count);
// {5: 2, 10: 1}

## More like this

• Collection · 78 snippets

### JavaScript Objects

Handle JavaScript objects with ease, using the snippets and tips in this ES6 collection.

• JavaScript ·

### How can I zip and unzip arrays in JavaScript?

Learn how to implement array zipping, a grouping of elements based on position in the original arrays, and its inverse, unzipping.

• JavaScript ·

### How can I split a JavaScript array into two groups?

Learn how to split a JavaScript array into two groups based on a function or an array of values.

• JavaScript ·

### Where and how can I use the destructuring assignment syntax in JavaScript?

Learn the basics of the destructuring assignment syntax in JavaScript ES6 and improve your code with this easy guide.

Start typing a keyphrase to see matching snippets.