我的问题实际上类似于: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,情况就是这样) ?当前的解决方案仅用于获取第一个最重复的重复,但它不处理重复。 谢谢!
答案 0 :(得分:2)
在计算发生率之前对数组进行排序:
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循环找到。
答案 1 :(得分:1)
这可行,example:
var arr = [3, 7, 7, 7, 7, 10, 10, 8, 5, 5, 5, 5, 20, 20, 1],
result = {},
max = 0,
res, key, min;
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;
}
}
for (var i in result) {
if (result[i] === max) {
key = parseInt(i, 10);
min = min || key;
console.log(min)
if (min > key) {
min = key;
}
}
}
res = min;
alert(res);
答案 2 :(得分:0)
len