Files
30-seconds-of-code/snippets/countBy.md
Angelos Chalaris 1ea24c068d Add countBy, update other By snippets
Updated all By snippets to have matching behavior, consistent argument naming and added countBy as per #100.
2018-01-11 13:45:53 +02:00

609 B

countBy

Groups the elements of an array based on the given function and returns the count of elements in each group.

Use Array.map() to map the values of an array to a function or property name. Use Array.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, i) => {
    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}