javascript - 如何获得在数组中出现最多的前五个元素?
问题描述
我已经知道如何获取在数组中出现最多的元素,但现在我需要获取在数组中出现最多的前 5 个元素。
我有这个数组:
[
"fuji",
"acros",
"bombshell",
"4za",
"aerozine",
"bianchi-milano",
"bianchi-milano",
"aerozine",
"rapha",
"rapha",
"rapha",
"100%",
"100%",
"100%",
"100%"
];
所以前五名应该是:
[
"100%",
"rapha",
"bianchi-milano",
"aerozine",
"fuji" // This one can be random as all the rest appears only once
]
这是我找到重复最多的代码:
array.sort( (a, b) => arr.filter(v => v === a).length - arr.filter(v => v === b).length ) .pop();
任何帮助以及澄清都将意味着很多!谢谢!!
解决方案
const myArray = [
'fuji',
'acros',
'bombshell',
'4za',
'aerozine',
'bianchi-milano',
'bianchi-milano',
'aerozine',
'rapha',
'rapha',
'rapha',
'100%',
'100%',
'100%',
'100%'
]
const sortByFrequency = (array) => {
var frequency = {}
array.forEach(function (value) { frequency[value] = 0 })
var uniques = array.filter(function (value) {
return ++frequency[value] == 1
})
return uniques.sort(function (a, b) {
const y = frequency[b] - frequency[a]
return y
})
}
然后调用这个函数:
sortByFrequency(myArray).slice(0, 5)
推荐阅读
- c++ - 替换为 cpp 中基于 getch 的代码块
- ruby-on-rails-6 - 如何在 rails 6/webpacker 中引用 scss 文件路径?
- android - 如何让我的 Android 应用程序始终在 Chrome 或其他支持 TWA 的浏览器中打开?
- flask - ModuleNotFoundError:没有名为“psycopg2”的模块,但不会安装
- aws-lambda - 如何从 AWS Amplify(GraphQL api 和 NodeJS Lambda)中的 Lambda 解析器获取当前用户?
- html - 无法在 html 中加载字体真棒图标
- python - 抓取使用 Javascript 加载的分页数据
- javascript - 为什么该方法将 padEnd 返回为未定义?
- python - 当使用 Python 将 URL 作为请求发送到服务器时如何知道请求 cookie
- java - 如何自动关闭自定义对话框