javascript - 获取数组 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()
解决方案
您可以计算项目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);
推荐阅读
- android - android studio 无法通过usb调试
- java - Android Maps:如何删除以前的圈子,但保留新的圈子?
- laravel - 如何在多列中搜索?
- python - python解析`ISO_8601`时间或时间间隔
- objective-c - 不能从多行的 NSTableView 中拖动
- java - Gradle 插件任务反射扫描插件的项目类文件而不是当前项目文件
- javascript - Ionic v1 / Angular - 从 DOM 中删除以前的离子视图
- php - 为什么我在 Wordpress 中使用 AJAX 时出现“GET 500”错误?
- openvpn - 如何在ubuntu的防火墙上添加SCTP
- c++ - 算术溢出:对 4 字节值使用运算符“*”,然后将结果转换为 8 字节值