4 kyu
函數參數傳入一個文字字串,回傳出現次數最多的前 3 個單字的陣列,按出現次數降序排列。
除了撇號 ‘
之外的所有符號與空格都無視,主要驗證的是英文字母字元,並且結果輸出為小寫。
function topThreeWords(text) {
let workArr = text.toLowerCase()
.replace(/([^a-z| ])([^'a-z|a-z'])/g, " ")
.trim()
.split(" ");
workArr = workArr.filter(item => item.length > 0)
let counter = {};
for (let i = 0; i < workArr.length; i++) {
if (counter[workArr[i]]) {
counter[workArr[i]]++
} else {
counter[workArr[i]] = 1;
}
}
let result = Object.entries(counter)
.sort((a, b) => b[1] - a[1])
.slice(0, 3)
.map(item => item.splice(0, 1));
return [].concat(...result);
}
由於輸出的結果為小寫,第一步先把字串轉為全小寫。
replace 取代方法是為了清除掉題目本身不承認的符號,取代成空格字符。
([^a-z| ])
:捕獲不是小寫字母和空格的字符。([^'a-z|a-z'])
:捕獲撇號不是出現在 a-z 的前後。
例如參數傳入:" //wont won't won't “
,斜線就會被 match 到;trim 清除掉頭尾空白,split 把字串拆分成陣列。
宣告 counter 物件來紀錄單詞的出現次數,以 [key, value]
的形式轉成陣列,並且依照 value 來排序,slice 擷取前三個,splice 返回指定內容,最後與空陣列拼接。