2013-02-08 55 views
0

我有重複值的數組的數組重複值的最高金額:查找使用JavaScript

[0, 1, 6, 0, 1, 0] 

什麼是返回的最高金額是一個特定的值,重複的有效途徑?

在示例數組中,我希望腳本返回3,因爲數字0重複次數最多,並且重複3次。 我已經在使用jQuery和Underscore。

回答

1

這與基本方法類似,但利用下劃線的reducemax函數。如果你真的有一個真正非常大的數組,我希望你能清楚地知道如何在縮減之前將它與一個映射階段並行化。

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); 
0

耶,這就像谷歌面試問題哈哈。我會建議循環你的數組一次,並保持每個元素的關聯數組,當你在遞增計數器的同時遇到它。

例如:

http://jsfiddle.net/btKjX/

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); 
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中將出現每個值的出現次數,其中數字本身就是關鍵。