我的问题实际上类似于:Extracting the most duplicate value from an array in JavaScript (with jQuery)
解决方案(我发现最好的解决方案,并由我稍作修改):
var arr = [3, 7, 7, 7, 7, 10, 10, 8, 5, 5, 5, 5, 20, 20, 1],
result = {},
max = 0,
res;
for( var i = 0, total = arr.length; i < total; ++i ) {
var val = arr[i],
inc = ( result[val] || 0 ) + 1;
result[val] = inc;
if( inc > max ) {
max = inc;
res = val;
}
}
alert(res);
我想补充一点:如果我们有,比如说两个出现次数相同的数字,我们如何找到它们中的最小值(上面应该提醒 5 而不是 7,就是这种情况) ?当前的解决方案仅适用于找到最重复的第一个,但不处理重复。 谢谢!
最佳答案
在计算发生率之前对数组进行排序:
var arr = [3, 7, 7, 7, 7, 10, 10, 8, 5, 5, 5, 5, 20, 20, 1];
function min_most_duplicate (arr) {
var result = {},
max = 0,
res;
arr = arr.slice(0); // make a copy of the array
arr.sort(function(a, b) { return (a - b); }); // sort it numerically
for( var i = 0, total = arr.length; i < total; ++i ) {
var val = arr[i],
inc = ( result[val] || 0 ) + 1;
result[val] = inc;
if( inc > max ) {
max = inc;
res = val;
}
}
return res;
}
min_most_duplicate(arr); // returns 5
这是可行的,因为 for 循环的编写方式将返回它发现的第一个重复次数最多的数组,因此如果数组已排序,最小的数字将排在第一位,因此它将是那个for 循环找到的那个。
关于javascript - 从 JavaScript 中的数组中提取最重复的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7207566/