我想获得 JavaScript 数组中出现次数(模式)最高的前 5 个元素。我找到了如何获取最高但不是前 5 名或前 10 名元素的片段。
下面是获取最高出现次数的代码片段:
if(!Object.values) Object.values = function(ob){
var arr = [];
for(var k in ob)
if(ob.hasOwnProperty(k))
arr.push(ob[k]);
return arr;
};
function multiMode(arr){
var map = arr.reduce(function(map, item){
if(!(item in map)) map[item] = 0;
return map[item]++, map;
}, {});
var max = Math.max.apply(null, Object.values(map)),
arr2 = [];
Object.keys(map).forEach(function(k){
if(map[k] === max) arr2.push(k);
});
return arr2;
}
console.log(multiMode(['pear', 'apple', 'orange', 'apple', 'pear', 'pear', 'apple','apple']));
//Returns apple
最佳答案
首先,建立一个key map => count entries
let counts = arr.reduce((map, fruit) => {
map[fruit] = (map[fruit] || 0) + 1;
return map;
}, {});
然后根据键创建一个排序数组
let sorted = Object.keys(counts).sort((a, b) => counts[b] - counts[a]);
然后取前5个
let top5 = sorted.slice(0, 5);
如果需要旧版
var counts = arr.reduce(function(map, fruit) {
map[fruit] = (map[fruit] || 0) + 1;
return map;
}, {});
var sorted = Object.keys(counts).sort(function(a, b) {
return counts[b] - counts[a];
});
var top5 = sorted.slice(0, 5);
关于javascript - 如何获取javascript数组中出现次数(模式)最高的前5个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37604865/