我有一个重复值的数组:
[0, 1, 6, 0, 1, 0]
返回特定值重复的最高金额的有效方法是什么?
在示例数组中,我希望脚本返回3,因为数字0重复次数最多且重复3次。 我已经在使用jQuery和Underscore了。
答案 0 :(得分:2)
答案 1 :(得分:1)
这类似于基本方法,但使用下划线的reduce
和max
函数。如果你有一个真正非常大的数组,我希望你能清楚地知道如何在reduce之前将它与map阶段并行化。
var arr = [1,0,2,3,4,0,3,0];
var counts = _.reduce(arr, function(counts, val) {
if (counts[val]) {
counts[val]++;
} else {
counts[val] = 1;
}
return counts;
}, {});
return _.max(counts);
答案 2 :(得分:0)
是的,这就像谷歌面试问题大声笑。我建议循环一次你的数组并保持每个元素的关联数组,因为你在增加一个计数器时会遇到它。
例如:
var a = [0, 0 , 2, 2, 3, 3, 3, 3];
var counts = {};
for(var i = 0, il = a.length; i < il; i++){
var num = a[i];
if(typeof counts[num] === 'undefined'){
counts[num] = 0;
}
counts[num]++;
}
var max = -1;
for(var c in counts){
if(counts[c] > max){
max = counts[c];
}
}
console.log(max);
答案 3 :(得分:0)
var nums = [0, 1, 6, 0, 1, 0]
var occurence = {}
$.each(nums, function(a, num_id) {
if (occurence[num_id] != null) {
occurence[num_id]++;
} else {
occurence[num_id] = 1;
}
});
然后,出现会产生nums中每个值的出现次数,数字本身就是关键。