javascript - 数组中出现次数最多的或最先选择的

标签 javascript jquery

我正在尝试获取数组值中出现次数最多的值,如果出现次数相等,我应该获取次数相等的第一个选定值。

例子:

var array = ['25', '50', 'a', 'a', 'b', 'c']

在这种情况下,我应该得到 a

var array = ['75', '100', 'a', 'b', 'b', 'a']

在这种情况下,我还应该得到 a

我进行了相当多的搜索,发现了一些有用的帖子,例如:

不知何故,我似乎无法修改这些示例以适用于我的情况。

现在我正在使用下面的代码,但它返回最后一次选择的相等事件,而不是第一次。 (信用https://stackoverflow.com/users/1238344/emissary)

function mostFrequent(array){
  return array.sort(function(a,b){
    return array.filter(function(v){ return v===a }).length
      - array.filter(function(v){ return v===b }).length
  }).pop();
}

欢迎提供任何帮助。

最佳答案

你可以使用这样的东西:

function mostFrequent(array) {
    var map = array.map(function(a) {
        return array.filter(function(b) {
            return a === b;
        }).length;
    });

    return array[map.indexOf(Math.max.apply(null, map))];
}

首先,它创建了所有值出现的映射。接下来只需检查 Math.max 哪个是最高的。检查 indexOf 中出现次数最多的第一个值,并返回原始数组中该索引的值。

ES2015

如果 ES2015 是一个选项,您可以使用这个。它的代码更少。

function mostFrequent(array) {
    let map = array.map((a) => array.filter((b) => a === b).length);

    return array[map.indexOf(Math.max.apply(null, map))];
}

如果你所在的地方甚至允许展开运算符(NodeJS v5 及更高版本,Chrome 54),你可以将 Math.max.apply(null, map) 替换为 Math.max(...map)!

关于javascript - 数组中出现次数最多的或最先选择的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40410470/

相关文章:

Javascript 变量和作用域

javascript - 使用 jQuery 将 Class 添加到 div 中的前 5 个元素

javascript - 如何制作像这种结构的内容 slider

jquery - jQuery ('.foo' ).find ('.bar' ) 是否等同于 jQuery ('.bar' ,jQuery ('.foo' ))?

javascript - 旋转后得到正确的左上角坐标

jquery - 将鼠标悬停在表格行上在单元格之间移动时触发

javascript - 用文本替换 "Undefined"

javascript - 在 select2 中搜索 select 属性

javascript - 自定义 jQuery 验证规则无法正常工作

Javascript 调试器,如何找到所需的 Javascript 文件