JS查找字符串中出現(xiàn)次數(shù)最多的字符
在一個字符串中,如 'zhaochucichuzuiduodezifu',我們要找出出現(xiàn)最多的字符。本文章將詳細說明方法思路。
先介紹兩個string對象中的兩個方法:indexOf()和charAt()方法
indexOf()方法介紹 返回某個指定的字符串值在字符串中首次出現(xiàn)的位置
charAt()方法介紹 返回某個指定位置的字符
先做一個小測試,找到字符串'woainixiaoli'中的每一個'i'出現(xiàn)的位置。
<script> var arr = 'woainixiaoli'; var index = -1; //定義變量index控制索引值 //當查找不到a,即indexOf()的值為-1時,結束循環(huán) do { index = arr.indexOf("i", index + 1); //使用第二個參數(shù)index+1,控制每一次查找都是從上一次查找到字符a的下一個索引位置開始 if (index != -1) { //可以找到字符i console.log(index); //輸出a的位置 } } while (index != -1); </script>
以上代碼運行后再控制臺輸出的是
進入正題,求字符串'zhaochucichuzuiduodezifu'最多的字符
方法一:用數(shù)組(存在缺點,當出現(xiàn)最多的字符不只一個時,只能找到一個)
<script> var str = "zhaochucichuzuiduodezifu"; var arr = [];//定義一個新數(shù)組 //循環(huán)遍歷字符串 for (var i = 0, length = str.length; i < length; i++) { var index = -1; var j = 0; //找每一個字符 do { index = str.indexOf(str[i], index + 1); if (index != -1) { j++; } }while (index != -1); arr[j] = str[i]; //把字符串str中的字符賦給數(shù)組arr索引為j的數(shù)據(jù),當多次循環(huán)后,會出現(xiàn)重復賦值的現(xiàn)象, //后賦值的會把之前的賦值覆蓋掉,但不影響我們找出字符出現(xiàn)最多的那個 } console.log(arr); console.log("最多的字符是" + arr[arr.length - 1]); console.log("次數(shù)是" + (arr.length - 1)); </script>
以上代碼運行后再控制臺輸出的結果如下圖:
從輸出的數(shù)組arr中也可以看出,此方法會把次數(shù)相同的字符覆蓋,只能顯示出一個。若有2個字符出現(xiàn)出現(xiàn)相同的最高次數(shù),此方法只能得出一個。基于此,參照下一個用對象來解決的方法。
方法二:用對象(推薦使用)
<script> var str = "zhaochucichuzuiduodezifu"; var o = {}; for (var i = 0, length = str.length; i < length; i++) { // var char = str[i]; var char = str.charAt(i); if (o[char]) { //char就是對象o的一個屬性,o[char]是屬性值,o[char]控制出現(xiàn)的次數(shù) o[char]++; //次數(shù)加1 } else { o[char] = 1; //若第一次出現(xiàn),次數(shù)記為1 } } console.log(o); //輸出的是完整的對象,記錄著每一個字符及其出現(xiàn)的次數(shù) //遍歷對象,找到出現(xiàn)次數(shù)最多的字符和次數(shù) var max = 0; var maxChar = null; for (var key in o) { if (max < o[key]) { max = o[key]; //max始終儲存次數(shù)最大的那個 maxChar = key; //那么對應的字符就是當前的key } } console.log("最多的字符是" + maxChar); console.log("出現(xiàn)的次數(shù)是" + max); </script>
以上代碼運行后再控制臺輸出的結果如下圖:
此方法解決了方法一的問題,而且每一個字符我們都可以清楚的記錄出現(xiàn)的次數(shù),當有兩個次數(shù)相同的字符時,可以在對象中清楚的看到。
不過還是存在不足,不能直接把次數(shù)最高的字符同時輸出,這還需要加額外的判斷條件。完美的代碼如下哈O(∩_∩)O
<script> var str = "nininihaoa"; var o = {}; for (var i = 0, length = str.length; i < length; i++) { var char = str.charAt(i); if (o[char]) { o[char]++; //次數(shù)加1 } else { o[char] = 1; //若第一次出現(xiàn),次數(shù)記為1 } } console.log(o); //輸出的是完整的對象,記錄著每一個字符及其出現(xiàn)的次數(shù) //遍歷對象,找到出現(xiàn)次數(shù)最多的字符的次數(shù) var max = 0; for (var key in o) { if (max < o[key]) { max = o[key]; //max始終儲存次數(shù)最大的那個 } } for (var key in o) { if (o[key] == max) { //console.log(key); console.log("最多的字符是" + key); console.log("出現(xiàn)的次數(shù)是" + max); } } </script>
結果如下:
以上所述是小編給大家介紹的JS查找字符串中出現(xiàn)次數(shù)最多的字符,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關文章
淺析webpack 如何優(yōu)雅的使用tree-shaking(搖樹優(yōu)化)
這篇文章主要介紹了webpack 如何使用tree-shaking(搖樹優(yōu)化),本文介紹了什么是tree-shaking,commonJS 模塊,es6 模塊,怎么使用tree-shaking等,具體操作步驟大家可查看下文的詳細講解,感興趣的小伙伴們可以參考一下。2017-08-08利用JavaScript實現(xiàn)檢測用戶是否在線功能
這篇文章主要為大家詳細介紹了如何利用JavaScript實現(xiàn)檢測用戶是否在線功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2022-12-12淺談js函數(shù)三種定義方式 & 四種調(diào)用方式 & 調(diào)用順序
下面小編就為大家?guī)硪黄獪\談js函數(shù)三種定義方式 & 四種調(diào)用方式 & 調(diào)用順序。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02詳解如何通過JavaScript實現(xiàn)函數(shù)重載
這篇文章主要為大家詳細介紹了如何通過JavaScript實現(xiàn)函數(shù)重載,文中的示例代碼講解詳細,對我們學習JavaScript有一定的幫助,感興趣的可以了解一下2023-01-01JavaScript中 ES6 generator數(shù)據(jù)類型詳解
generator 是ES6引入的新的數(shù)據(jù)類型,由function* 定義, (注意*號),接下來通過本文給大家介紹js中 ES6 generator數(shù)據(jù)類型,非常不錯,感興趣的朋友一起學習吧2016-08-08