获取数组JavaScript中出现次数最多的元素

McK*_*NNN 2 javascript arrays frequency

我有一个数组,希望得到最多出现的元素,

第一种情况

let arr1 = ['foo', 'foo', 'foo', 'bar', 'bar', 'bar', 'baz', 'baz']
let newArr = someFunc(arr1)
Run Code Online (Sandbox Code Playgroud)

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

console.log(newArr) // ['foo', 'bar'] 
Run Code Online (Sandbox Code Playgroud)

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

第二种情况

 let arr2 = ['foo', 'foo', 'foo', 'bar', 'baz']
 let newArr = someFunc(arr2)
Run Code Online (Sandbox Code Playgroud)

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

console.log(newArr) // ['foo']
Run Code Online (Sandbox Code Playgroud)

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

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

newArr= arr.sort((a,b) =>
arr.filter(v => v===a).length
- arr.filter(v => v===b).length
).pop()
Run Code Online (Sandbox Code Playgroud)

sli*_*der 7

您可以使用来计数项目,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);
Run Code Online (Sandbox Code Playgroud)