数组中出现次数最多或第一个选择

Jrn*_*Jrn 1 javascript jquery

我试图获得数组值的最高出现次数,如果出现次数相等,我应该获得相同出现次数的第一个选定值。

例子:

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

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

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

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

我已经完成了相当多的搜索,并找到了一些有用的帖子,例如:

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

现在我正在使用下面的代码,但它返回最后一个选择的相等事件,而不是第一个。(信用/sf/users/86684111/

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();
}
Run Code Online (Sandbox Code Playgroud)

欢迎对此提供任何帮助。

daa*_*ham 5

你可以使用这样的东西:

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))];
}
Run Code Online (Sandbox Code Playgroud)

首先,它创建所有值出现的映射。接下来只需检查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))];
}
Run Code Online (Sandbox Code Playgroud)

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