我正在尝试获取数组值中出现次数最多的值,如果出现次数相等,我应该获取次数相等的第一个选定值。
例子:
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/