我有重複值的數組的數組重複值的最高金額:查找使用JavaScript
[0, 1, 6, 0, 1, 0]
什麼是返回的最高金額是一個特定的值,重複的有效途徑?
在示例數組中,我希望腳本返回3,因爲數字0重複次數最多,並且重複3次。 我已經在使用jQuery和Underscore。
我有重複值的數組的數組重複值的最高金額:查找使用JavaScript
[0, 1, 6, 0, 1, 0]
什麼是返回的最高金額是一個特定的值,重複的有效途徑?
在示例數組中,我希望腳本返回3,因爲數字0重複次數最多,並且重複3次。 我已經在使用jQuery和Underscore。
這與基本方法類似,但利用下劃線的reduce
和max
函數。如果你真的有一個真正非常大的數組,我希望你能清楚地知道如何在縮減之前將它與一個映射階段並行化。
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);
耶,這就像谷歌面試問題哈哈。我會建議循環你的數組一次,並保持每個元素的關聯數組,當你在遞增計數器的同時遇到它。
例如:
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);
一個哈克的方式可能是對它進行排序,將它的每一個值的變化,再看看每個字符串的長度,但我們將嘗試一些更合理:
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中將出現每個值的出現次數,其中數字本身就是關鍵。