2014-08-28 206 views
0
$.each(string.split(''), function(){ 
    if(!check[this]){ 
     count++; 
     check[this]=true; 
    } 
}) 

對於我上面的函數,它能夠計算唯一字符的數量。例如,對於1113,結果將爲2,因爲那裏只有1和3.對於1134,結果將爲3,因爲有1,3和4.在JavaScript中計算字符串中數字的出現次數

但是我想舉個例子1133和1113,有相同的2個唯一編號是1和3.我如何計算1和3的最大值?對於1133這將是2,而對於1113它將是3,因爲1出現3次。

我只需要計算字符串中出現最多的數字(僅限數字)的出現次數。

回答

0

存儲計數並找出計數的最大值。這是投入的函數代碼:

function getMostOccurrence(str) { 
    var check = {}; 
    var maxOccurrences = 0; 

    // This part you already have...kind of 
    str.split('').forEach(function(num) { 
     // Set it the first time 
     if (typeof check[num] === 'undefined') { 
      check[num] = 0; 
     } 

     // Increase it 
     check[num] += 1; 
    }); 

    // Find the max of that 
    for (var num in check) { 
     if (check.hasOwnProperty(num)) { 
      if (check[num] > maxOccurrences) { 
       maxOccurrences = check[num]; 
      } 
     } 
    } 

    return maxOccurrences; 
} 
1

你需要幾個幫手:

// Given an object, it returns the values in an array 
// {a:1, b:2} => [1,2] 
var values = function(x) { 
    return Object.keys(x).map(function(k){return x[k]}) 
} 

// Given an array, it counts occurrences 
// by using an object lookup. 
// It will return an object where each key is an array item 
// and each value is the number of occurrences 
// [1,1,1,3] => {'1':3, '3':1} 
var occurrences = function(xs) { 
    return xs.reduce(function(acc, x) { 
    // If key exists, then increment, otherwise initialize to 1 
    acc[x] = ++acc[x] || 1 
    return acc 
    },{}) 
} 

// Composing both helpers 
var maxNumberOccurrence = function(n) { 
    // To get the maximum value of occurrences 
    // we use Math.max with `apply` to call the function 
    // with an array of arguments 
    return Math.max.apply(0, values(occurrences(n.toString().split('')))) 
} 

maxNumberOccurrence(1113) //=> 3 
+0

你的方法看起來更復雜。您是否介意評論/解釋它,以便我們都可以瞭解這裏發生的情況而無需手動解碼? – 2014-08-28 07:56:38

+0

檢查編輯,我添加了一些評論。 – elclanrs 2014-08-28 08:01:52

+0

非常好。雖然我想知道是否有任何理由使用'Array.prototype.reduce'作爲迭代器? – 2014-08-28 08:06:13

相關問題