首页 > 解决方案 > 获取数组 JavaScript 中出现次数最多的元素

问题描述

我有一个数组,我想获取出现次数最多的元素,

第一种情况

let arr1 = ['foo', 'foo', 'foo', 'bar', 'bar', 'bar', 'baz', 'baz']
let newArr = someFunc(arr1)

所以在这种情况下,我希望新数组具有值

console.log(newArr) // ['foo', 'bar'] 

因为值 'foo' 和 'bar' 是数组中出现次数最多的元素

第二种情况

 let arr2 = ['foo', 'foo', 'foo', 'bar', 'baz']
 let newArr = someFunc(arr2)

所以在这种情况下,我希望新数组具有值

console.log(newArr) // ['foo']

因为值 'foo' 是数组中出现次数最多的元素

这是我尝试过的,即使有多个元素出现相同的次数,它也只会让我获得其中一个元素

newArr= arr.sort((a,b) =>
arr.filter(v => v===a).length
- arr.filter(v => v===b).length
).pop()

标签: javascriptarraysfrequency

解决方案


您可以计算项目reduce并找到最大出现次数。然后您可以过滤任何具有该计数的键:

let arr = ['foo', 'foo', 'foo', 'bar', 'bar', 'bar', 'baz', 'baz'];

let counts = arr.reduce((a, c) => {
  a[c] = (a[c] || 0) + 1;
  return a;
}, {});
let maxCount = Math.max(...Object.values(counts));
let mostFrequent = Object.keys(counts).filter(k => counts[k] === maxCount);

console.log(mostFrequent);


推荐阅读