美文网首页工作生活
Js求字符串中出现最多的字符个数

Js求字符串中出现最多的字符个数

作者: 光头小青蛙 | 来源:发表于2019-07-04 20:17 被阅读0次

面试的过程中一般都会遇到这个笔试题,我也尝试写了一下。

  • 首先要循环字符串求出每个字符出现的个数,将字符的数量存储到对象obj中,字符为键,数量为值。如果obj对象存在当前遍历字符键名,说明已经出现过,所以把这个键值+1,若没有就给obj对象添加一个新的字符属性,属性值为1,最终obj的对象。
let str='ffeffdsfighdsieeeeeeeee';
let obj={};
for (let i = 0; i < str.length; i++) {
            if (obj[str[i]]) {
                obj[str[i]] += 1;
            } else {
                obj[str[i]] = 1
            }
        }
image.png
  • obj对象已经获取到,现在需要比较属性值的大小。用到了Object(构造函数创建一个对象包装器。ie不支持,查看兼容)下的一个方法Object.entries(obj),它的作用就是将对象分成一个数组,数组的元素是属性名和属性值组成的嵌套数组。结果如下。
let res = Object.entries(obj)
console.log(res)
image.png
  • 最后使用数组的sort方法进行排序,求出出现最多字符的个数。
res.sort((a, b) => {
            if (a[1] > b[1]) {
                return 1
            } else {
                return -1
            }
        })
  • 封装的获取函数代码如下。
let str = 'ffeffdsfighdsieeeeeeeee';
    function getNum(x) {
        let obj = {};//求出每个字符出现的个数
        for (let i = 0; i < x.length; i++) {
            if (obj[x[i]]) {
                obj[x[i]] += 1;
            } else {
                obj[x[i]] = 1
            }
        }
        let res = Object.entries(obj)//将个数排序
        res.sort((a, b) => {
            if (a[1] > b[1]) {
                return 1
            } else {
                return -1
            }
        })
        return res[res.length - 1][0] + '数量' + res[res.length - 1][1]//返回最大的个数字符,
    }
    console.log(getNum(str))
image.png

相关文章

网友评论

    本文标题:Js求字符串中出现最多的字符个数

    本文链接:https://www.haomeiwen.com/subject/axldhctx.html