阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

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

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

      字符串循环方法

      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 查找字符串中出现最多字符的个数

      目录
      目录