JavaScript算法------计算出现频率最高的元素及数量

系列文章——字符串求取出现次数及元素本身

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .box {
        width: 800px;
        height: 500px;
        border: 1px solid #ccc;
        margin: 20px auto;
      }
      .box-title {
        text-align: center;
      }
      .showList {
        height: 290px;
        width: 90%;
        margin: 10px auto;
        border: 1px solid #ccc;
        overflow: auto;
      }
    </style>
  </head>
  <body>
    <div class="box">
      <h1 class="box-title">元素中出现最多次数</h1>
      <div style="margin-left: 40px">
        <label for="textTime">
          输入字符串:
          <input id="textTime" value="" placeholder="输入比较的内容" />
          <button onclick="setFilter()">过滤</button>
          <button onclick="deleteFilter()">清除</button>
        </label>
      </div>
      <div>
        <div class="showList">
          <ol class="counts"></ol>
        </div>
      </div>
    </div>
  </body>
  <script>
    function maxStr(str) {
      var obj = {}; // 定义一个存储空间
      var max = { item: [], count: 1 }; // 初始化最大值对象item为元素  count是次数
      str.forEach((item) => {
        // 判断该对象中是否出现该元素,无添加,有自增
        obj[item] == undefined ? (obj[item] = 1) : obj[item]++;
      });
      // Object.entries() 可以把一个对象的键值以数组的形式遍历出来
      for (var item of Object.entries(obj)) {
        // console.log(item, 2223);
        // 当该数量大于max的数值时,清空数组重新赋值
        if (item[1] > max.count) {
          max.item = [];
          max.item.push(item[0]);
          max.count = item[1];
          // 当该数量与max的数值相等且不包含当前元素的时候,追加第二个元素     为了判断有多个元素数量相等的情况
        } else if (item[1] == max.count && max.item.indexOf(item[0]) == -1) {
          max.item.push(item[0]);
          max.count = item[1];
        }
      }
      return max.item + "出现了最多的次数,最多为" + max.count + "次.";
    }
    // console.log(maxStr("assdsdfsfsjiwaaasdmsdifjsfaaaaas")); //a,s出现了最多的次数,最多为9次.
    let showUl = document.querySelector(".counts");
    function setFilter() {
      var showData = document.getElementById("textTime").value.split("");
      var li = document.createElement("li");
      console.time("时间算法");
      if (showData == "") {
        alert("输入不可为空");
        return;
      }
      li.innerHTML = maxStr(showData);
      showUl.appendChild(li);
      console.timeEnd("时间算法");
    }
    function deleteFilter() {
      showUl.innerHTML = "";
      document.getElementById("textTime").value = "";
    }
  </script>
</html>

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别动我代码儿

感谢技术精进的你,加油不负韶华

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值