我试图获得数组值的最高出现次数,如果出现次数相等,我应该获得相同出现次数的第一个选定值。
例子:
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)
欢迎对此提供任何帮助。
你可以使用这样的东西:
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 是一个选项,你可以使用这个。这是更少的代码。
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)!