2015-11-08 99 views
0

我產生子與一個給定的字符串,並使用此代碼的子長數組:排序子串陣列 - JS

function NthFrequencyCount(string,length){ 

    var frequency = {}; 
    for(var i = 0;i < string.length-length;i++){ 
     var char = string.substring(i,i+length); 

     if(char.indexOf(' ') === -1){ 
      if(frequency[char] === undefined) 
       frequency[char] = 1; 
      else 
       frequency[char]++; 
     } 
    } 
    return frequency; 
}; 

,我想這樣做的下一件事是將子排序按他們的頻率。

我該怎麼做?

+2

聽起來像是不錯的計劃。你還沒有問過問題?你的問題是什麼? –

+0

您是否有進一步的問題繼續?如果你的問題解決了,那麼你應該將幫助解決問題的答案標記爲**接受**。這有助於其他有相同問題的人。快樂編碼:) –

回答

1

繼續從您的代碼。見解釋在評論:

// frequency object is populated 
entries = []; 
for (var key in frequency) { // convert freqeuncy into array of entries 
    if (p.hasOwnProperty(key)) { 
    entries.push({ key:key, freq:frequency[key] }); 
    } 
} 

entries.sort(function(a, b) { // sort entries by freq 
    return a.freq - b.freq; 
}).map(function(entry) { // pluck out only the key, which is the substring 
    return entry.key; 
}); 
0

你需要有子字符串數組,然後你就可以提供比較給JS的sort方法來進行排序。

假設你有子,即substrings數組:

var frequencies = nthFrequencyCount(string, length); 
substrings.sort(function (a, b) { 
    // This sort the substrings in ascending order of frequency 
    return frequencies[a] - frequencies[b]; 
}); 
+0

我沒有「子串」數組,我從「NthFrequencyCount」中得到的是一個數組,它使用子串訪問數據,數據是一個表示頻率的數字。 – Gil

+0

你的NthFrequencyCount返回一個對象,而不是一個數組,所以你不能對它進行排序。如果您無法事先創建或訪問此類數組,那麼@ LingZong上面的解決方案將有助於從頻率對象創建該數組。 –