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

标签 javascript arrays frequency

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

First scenario

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

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

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

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

Second scenario

 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()

最佳答案

您可以使用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);

关于javascript - 获取数组 JavaScript 中出现次数最多的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53509971/

相关文章:

linux - 每线程 Intel MSR 频率缩放

java - 方法过滤数组中的偶数值并将它们返回到新数组中

c# - ascii byte[] 和 int 之间直接转换

javascript - 内部异步函数完成运行后如何调用外部函数返回?

php - 如何使网站直接连接到打印机?这样就可以直接打印订单了

java - 如何将这些整数传递给下面的方法?

java - 确定从循环内部调用的递归函数的时间复杂度

sql-server - SQL Server函数在列中显示词频

javascript - trim 字符串开头的逗号

javascript - avgrund 如何调用激活函数