2016-10-20 76 views
2

我遇到了一些問題,如何真正獲得我獲得的最大地圖價值。現在,我的代碼只顯示每個鍵的實際計數值,我堅持嘗試記錄最大值,我認爲在我的代碼中發生了什麼,for循環是通過counts [key]數組,但它仍將保留在1,這是第一個值,並停止,因爲唯一被記錄的數字是1.我不期待實際的答案,也許一些提示和提示,會導致我正確的方式。提前致謝。使用Javascript計算模式

var Mode = function(data) { 
 
    var counts = {}; 
 
    for (let i = 0; i < data.length; i++) { 
 
     counts[data[i]] = (counts[data[i]] + 1) || 1; 
 
    } 
 
    for (var key in counts) { 
 
     if (counts.hasOwnProperty(key)) { 
 
      var maxValue = Math.max(counts[key]); 
 
     } 
 
    } 
 
    return maxValue; 
 
} 
 
console.log(Mode([1, 5, 2, 3, 3, 4, 4, 4]));

+0

什麼是正確答案? 4或5? –

+0

正確的答案是3,因爲我的代碼實際上是從數據中計算每個數組的值,所以基本上它是'1'= 1; '2'= 2; '3'= 2; '4'= 3; '5'= 1; 我實際上正在尋找的是比較數據數組的實際計數數量,這就是爲什麼我將所有這些數據放入地圖中,現在我試圖比較每個值並記錄正確答案 – Siegfried

+1

但是'4'在你的例子中是最高的。 – Walf

回答

0

我終於通過使用下面的代碼解決了這個問題:

var Mode = function(data) { 
var counts = {}; 
for (let i = 0; i < data.length; i++) { 
    counts[data[i]] = (counts[data[i]] || 0) + 1 
} 
var max = 0; 
var values = []; 
for (var key in counts) { 
    if (counts.hasOwnProperty(key)) { 
     if (counts[key] > max) { 
      max = counts[key]; 
      values = [key]; 
     } else if (counts[key] === max) { 
      max = counts[key]; 
      values.push(key); 
     } 
    } 
} 
return "The highest value is " + values.join(", ") + " with a count of " + max; 
} 
console.log(Mode([1, 2, 3, 3, 4, 4])); 

非常感謝您的幫助:)。

1

你需要啊更高的計算數量在這array.try這個

var max =0; 
 
var Mode = function(data) { 
 
    var counts = {}; 
 
    for (let i = 0; i < data.length; i++) { 
 
     counts[data[i]] = (counts[data[i]] + 1) || 1; 
 
    } 
 
    for (var key in counts) { 
 
     if (counts.hasOwnProperty(key)) { 
 
      if(counts[key] > max){max=counts[key];} 
 
      
 
     } 
 
    } 
 
    return max; 
 
} 
 
console.log(Mode([1, 5, 2, 3, 3, 4,4, 4, 4]));//4 is a higher count 
 
console.log(Mode([ 5,5,5,5,5,5,5, 2, 3, 3, 4, 4]));//5 is higher count

+1

只是一個評論......這是慣例,開始與「新模式()」更高的情況下首字母功能。只是通過評論:) –