找出一个字符串中哪个字母出现的次数最多,最多的多少次?

🌙
手机阅读
本文目录结构

找出一个字符串中哪个字母出现的次数最多,最多的多少次?

字符串循环方法

let str = "axihe2020an06bang30";
let obj = {};
[].forEach.call(str, item => {
    if (typeof obj[item] !== 'undefined') {
        obj[item]++;
        return;
    }
    obj[item] = 1;
})
let target = {
    MAX_VAL: 1,
    item: ''
}
for (const key in obj) {
    const element = obj[key];
    if (element > target.MAX_VAL) {
        target.MAX_VAL = element;
        target.item = key;
    }
}
console.log('obj', obj);
console.log('target', target);//{MAX_VAL: 4, item: "0"}

思考出现多个项都是一样的,该如何写呢?

正则验证 - 最优

 let str = "axihe2020an06bang30";
// 把字母都排序到一起
let tempAry = str.split('').sort((a, b) => {
    return a.localeCompare(b);
    // localeCompare 比较位置前后,可以排序
})
console.log(tempAry.join(''),);

// 写正则:需求,匹配连续出现数量多的字符
//(\w)需要捕获的内容,\1 和前面出现一样的,并且出现过1次以上的时候才匹配
let reg = /(\w)\1+/g;
let matchAry = tempAry.join('').match(reg);
console.log(matchAry);//["0000", "22", "aaaa", "ee", "hh", "ii", "nn", "xx"]
matchAry.sort((a, b) => { return b.length - a.length });
console.log(matchAry);// ["0000", "aaa", "22", "nn"] 按照长度排序的

思考出现多个项都是一样的如何?

思考:如果使用 ‘axihe2020an06bang30axihe’ 0 和 a 都是相同次数呢?

// 兼容多个的
let matchAry = ["0000", "aaaa", "22", "nn"];
// 设置第一个是最大的
let target = {
    MAX_VAL: matchAry[0].length,
    item: [matchAry[0].slice(0, 1)]//slice 或者 substr(0,1) 等都可以
}

let targetAry = [];
matchAry.forEach(element => {
    // >= 可以把相同长度的也找到
    if (element.length >= target.MAX_VAL) {
        targetAry.push({
            item: element[0].slice(0, 1),
            length: element.length
        })
    }
})
console.log('targetAry', targetAry);

上面运行的结果是 [ {item: "0", length: 4},{item: "a", length: 4}]

其它方法

上面是一个思路指引,如果 localeCompare 比较位置前后,可以正则动态匹配固定数量的连续出现的字符;

然后通过 whild 方式,或者递归的方式来实现;

扩展连接:JavaScript 查找字符串中出现最多字符的个数

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了