如何获取数组中出现次数最多的前五个元素



我已经知道如何获得数组中出现最多的元素,但现在我遇到了一个需要获得数组中显示最多的前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)

您首先需要所有单词的频率,然后才能获得前5名频繁的(如果你先对它们进行排序,然后获得前5名,会更容易)


let a = [
"fuji",
"acros",
"bombshell",
"4za",
"aerozine",
"bianchi-milano",
"bianchi-milano",
"aerozine",
"rapha",
"rapha",
"rapha",
"100%",
"100%",
"100%",
"100%"
];
let hashMap = {}
a.map(e=>{
if(hashMap[e]) hashMap[e]++;
else           hashMap[e]=1
})
let keys = Object.keys(hashMap);
let values = Object.values(hashMap);
let array = keys.map((e,i)=>({name:keys[i],value:values[i]}))
array.sort(function (a, b) {
return a.value - b.value;
});
array.splice(-5);

const items = [
"fuji",
"acros",
"bombshell",
"4za",
"aerozine",
"bianchi-milano",
"bianchi-milano",
"aerozine",
"rapha",
"rapha",
"rapha",
"100%",
"100%",
"100%",
"100%"
];
const totals = items.reduce((acc, item) => ({
...acc,
[item]: acc[item] ? acc[item] + 1 : 1
}), {});
const totalsDesc = Object.keys(totals).sort(
(item1,item2) => totals[item1] > totals[item2] ? -1 : 1
);
const result = totalsDesc.slice(0,5);
console.log(result);

参见以下

const list = ['j', 'b', 'c', 'tt', 'z', 'b', 'c', 'a', 'tt', 'tt'];
function Counter(array) {
array.forEach(val => this[val] = (this[val] || 0) + 1);
}
console.log(new Counter(list));

最新更新