2015-09-18 51 views
0

好吧,我只想到如何從陣列中獲得一種模式..但是我想要得到2,3或更多,如果它們出現相同的次數。 這是代碼:查找數組的模式? Javascript

var frequency = {}; // array of frequency. 
var maxFreq = 0; // holds the max frequency. 

for (var i in array) { 
    frequency[array[i]] = (frequency[array[i]] || 0) + 1; // increment frequency. 

    if (frequency[array[i]] > maxFreq) { // is this frequency > max so far ? 
     maxFreq = frequency[array[i]]; // update max. 
     mode = array[i];   // update result. 
    } 
} 

所以現在,如果我有一個array = [3, 8, 3, 6, 1, 2, 9]; 我得到mode = 3;

但是我正在尋找的是如果array = [3, 6, 1, 9, 2, 3, 6, 6, 3, 1, -8, 7]; 我想要得到的mode = 3, 6;

+0

[計數JavaScript數組元素的出現]的可能重複(http://stackoverflow.com/questions/5667888/counting-the-occurrences-of-javascript-array-elements) – Nit

+0

你能解釋這些句子嗎? 「得到一個模式陣列」 「得到模式= 3,6」 謝謝, – FoxInCloud

+0

哦,對不起!我想把「模式」變成一個對象。這是我的對象: 返回{ 最大值:最大, 平均值:平均值,中位數 :中位數, 分鐘:分鐘, 模式:模式, 範圍:範圍 }; –

回答

0

的問題沒有說明如何獲取模式,但如果我們在一個數組希望他們,我們可以改變這樣的代碼:

function getModes(array) { 
 
    var frequency = {}; // array of frequency. 
 
    var maxFreq = 0; // holds the max frequency. 
 
    var modes = []; 
 

 
    for (var i in array) { 
 
    frequency[array[i]] = (frequency[array[i]] || 0) + 1; // increment frequency. 
 

 
    if (frequency[array[i]] > maxFreq) { // is this frequency > max so far ? 
 
     maxFreq = frequency[array[i]]; // update max. 
 
    } 
 
    } 
 

 
    for (var k in frequency) { 
 
    if (frequency[k] == maxFreq) { 
 
     modes.push(k); 
 
    } 
 
    } 
 

 
    return modes; 
 
} 
 

 
alert(getModes([3, 6, 1, 9, 2, 3, 6, 6, 3, 1, -8, 7]));

+0

的事情是,我想要得到的模式爲對象,像這樣: 回報{ 最大:最大, 平均值:平均值, 位數:median, min:min, mode:[mode], range:range }; –

+0

那麼如何從功能中挑選模式,最好的方法呢? 乾杯! –

+0

該函數返回一組模式。這就是你要求的。 – Amit