1

How do you count occurrences of an object in a javascript array, then associate this with the object. For example: If my array is : [4,5,5,4,5,3,3,5,4,3] How would I get a key/value pair that would count how many times the object occurred, and what object that is. So the output I am looking for is: {3:3, 4:3, 5:4} meaning 3 occurred 3 times, 4 occurred 3 times, and 5 occurred 4 times.

MattG
  • 1,682
  • 5
  • 25
  • 45
  • 3
    Have you searched the archives for this? There are many existing answers. (i.e. https://stackoverflow.com/questions/5667888/counting-the-occurrences-frequency-of-array-elements) – Mark Feb 04 '19 at 21:34

2 Answers2

3

You can accomplish this succintly using reduce:

const input = [4,5,5,4,5,3,3,5,4,3];

const output = input.reduce((accum, x) => {
  accum[x] = accum[x] ? accum[x] + 1 : 1;
  return accum;
}, {});

console.log(output);
jo_va
  • 13,504
  • 3
  • 23
  • 47
2

You can use Array.prototype.reduce() to iterate through the array. The accumulator in the function will be a plain object, {}, and in each iteration you simply check if the array's item is a key in the object or not:

  • if it is not, then create a new key and give it a count of 1
  • if it is, then access the pre-existing key and increment its count by 1

const arr = [4,5,5,4,5,3,3,5,4,3];

const keyedArr = arr.reduce((accumulator, currentValue) => {
  const key = currentValue.toString();
  if (!(key in accumulator))
    accumulator[key] = 1;
  else
    accumulator[key] += 1;
    
  return accumulator;
}, {});
console.log(keyedArr);
Terry
  • 63,248
  • 15
  • 96
  • 118