案例:
let str = "nininihaoa"; let obj = {}; //定義一個新對象
//循環遍歷字符串
for (let i = 0; i < str.length; i++) { // charAt()方法,返回某個指定位置的字符
let char = str.charAt(i); // char就是對象obj的一個屬性,obj[char]是屬性值,obj[char]控制出現的次數(char是鍵值對中的鍵,obj[char]是值)
if (obj[char]) { obj[char]++; //次數加1
} else { obj[char] = 1; //若第一次出現,次數記為1
} } // 輸出的是完整的對象,記錄着每一個字符及其出現的次數
console.log(obj); // 遍歷對象,找到出現次數最多的字符的次數
let max = 0; let maxChar = ""; for (let key in obj) { if (max < obj[key]) { max = obj[key]; // max始終儲存次數最多的那個
maxChar = key; // 那么對應的字符就是當前的key
} } console.log("最多的字符是" + maxChar); console.log("出現的次數是" + max);
輸出結果:
以上結果中:我們可以清楚的記錄每一個字符出現的次數,當有兩個次數相同的字符時,也可以在對象中清楚的看到。不過還是存在些許不足,不能直接把次數最高的字符同時輸出,這還需要加額外的判斷條件。完美的代碼應如下:
let str = "nininihaoa"; let obj = {}; //定義一個新對象
//循環遍歷字符串
for (let i = 0; i < str.length; i++) { // charAt()方法,返回某個指定位置的字符
let char = str.charAt(i); // char就是對象obj的一個屬性,obj[char]是屬性值,obj[char]控制出現的次數(char是鍵值對中的鍵,obj[char]是值)
if (obj[char]) { obj[char]++; //次數加1
} else { obj[char] = 1; //若第一次出現,次數記為1
} } // 輸出的是完整的對象,記錄着每一個字符及其出現的次數
console.log(obj); // 遍歷對象,找到出現次數最多的字符的次數
let max = 0; // let maxChar = "";
for (let key in obj) { if (max < obj[key]) { max = obj[key]; // max始終儲存次數最多的那個
// maxChar = key; //那么對應的字符就是當前的key
} } // console.log("最多的字符是" + maxChar);
// console.log("出現的次數是" + max);
// 遍歷對象,找到出現次數最多的字符和其次數
for (let key in obj) { if (obj[key] == max) { //對應最多的字符就是當前的key
//console.log(key);
console.log("最多的字符是" + key); console.log("出現的次數是" + max); } }
注意:最后一次遍歷(循環)對象的目的是:當符合obj[key] == max條件時,直接把次數最高的字符同時輸出。比較清晰!
輸出結果:
友情提示:
用數組(存在缺點,當出現最多的字符不只一個時,只能找到一個)
所以用推薦使用對象!!!