最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS查找字符串中出現(xiàn)次數(shù)最多的字符

 更新時間:2016年09月05日 09:12:54   作者:master  
本文給大家?guī)韮煞Njs中查找字符串中出現(xiàn)次數(shù)最多的字符,在這兩種方法中小編推薦使用第二種,對js查找字符串出現(xiàn)次數(shù)的相關(guān)知識感興趣的朋友一起看看吧

在一個字符串中,如 'zhaochucichuzuiduodezifu',我們要找出出現(xiàn)最多的字符。本文章將詳細(xì)說明方法思路。

先介紹兩個string對象中的兩個方法:indexOf()和charAt()方法

indexOf()方法介紹  返回某個指定的字符串值在字符串中首次出現(xiàn)的位置

charAt()方法介紹  返回某個指定位置的字符

先做一個小測試,找到字符串'woainixiaoli'中的每一個'i'出現(xiàn)的位置。

<script>
var arr = 'woainixiaoli';
var index = -1; //定義變量index控制索引值
//當(dāng)查找不到a,即indexOf()的值為-1時,結(jié)束循環(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ù)組(存在缺點,當(dāng)出現(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ù),當(dāng)多次循環(huán)后,會出現(xiàn)重復(fù)賦值的現(xiàn)象,
                    //后賦值的會把之前的賦值覆蓋掉,但不影響我們找出字符出現(xiàn)最多的那個
}
console.log(arr);
console.log("最多的字符是" + arr[arr.length - 1]);
console.log("次數(shù)是" + (arr.length - 1));
</script>

以上代碼運行后再控制臺輸出的結(jié)果如下圖:

  從輸出的數(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; //那么對應(yīng)的字符就是當(dāng)前的key
}
}
console.log("最多的字符是" + maxChar);
console.log("出現(xiàn)的次數(shù)是" + max);
</script>

以上代碼運行后再控制臺輸出的結(jié)果如下圖:


  此方法解決了方法一的問題,而且每一個字符我們都可以清楚的記錄出現(xiàn)的次數(shù),當(dāng)有兩個次數(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>

結(jié)果如下:

以上所述是小編給大家介紹的JS查找字符串中出現(xiàn)次數(shù)最多的字符,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評論

华蓥市| 崇明县| 赣榆县| 奇台县| 兖州市| 临西县| 锡林浩特市| 农安县| 濮阳县| 兴业县| 西吉县| 深圳市| 新竹市| 新宾| 建昌县| 海伦市| 博乐市| 尉氏县| 长沙县| 中牟县| 鄂州市| 长垣县| 灵武市| 鄂尔多斯市| 镇远县| 茂名市| 固始县| 顺昌县| 鄂托克前旗| 千阳县| 香港| 江孜县| 旅游| 玛沁县| 河池市| 泰州市| 库尔勒市| 陕西省| 鄢陵县| 姚安县| 石台县|