javascript - 如何获取javascript数组中出现次数(模式)最高的前5个元素

标签 javascript arrays

我想获得 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/

相关文章:

javascript - 在react js中解析JSON

javascript - 无法从 MaterializeCSS MultiSelect 获取值

c# - 通用列表中的数组

php - 通过 ajax POST json 数据发送一个空数组

javascript - 从数组中导出无序列表

javascript - Express js 4x :req. 参数返回空对象

javascript - 为什么单击我的 Accordion 时不显示子选项卡?

javascript - 如何将对象添加到数组中但仅当数组的当前元素为 0 时?

javascript - 我的 .sort() 仅对输入框中添加的值进行排序?为什么是这样

javascript - 在菜单目标上禁用 mouseenter