原生 js 计算 html 中出现次数最多的标签

前几天学姐跟我讨论了一道题,觉得还挺有意思的。

题目描述:
请使用原生 JavaScript 实现一个方法,判断 html 中出现次数最多的标签,并统计这个次数。

解题思路:

  1. 取到页面中所有标签,这里是会有重复的;
  2. 遍历所有标签,统计每个标签出现的次数。

其实统计标签出现的次数很容易想到 key-value 的形式,key 存储标签名,value 存储出现的次数,遍历时发现一个就对 value+1。因此就涉及到了 ES6 一个新的特性 Map 数据结构:阮一峰 ES6教程 Map 数据结构。代码如下:

var bodyNodes = document.body.getElementsByTagName('*');  // 获得所有标签,类型为 object
var map = new Map();
var key;  // 所求标签
var max = 0;  // 所求最大值

for (let i = 0, len = bodyNodes.length; i < len; i++) {
  var ele = bodyNodes[i];
  var item = ele.localName;  // 标签名
  if (map.has(item)) {  // map 中已存在该标签
    if (max < map.get(item) + 1) {  // 加入后次数最大
      max = map.get(item) + 1;
      key = item;  // 保存该标签名
    }
    map.set(item, map.get(item) + 1);  // 替换旧值
  } 
  else {  // map 中不存在该标签
    map.set(item, 1);
  }
}

解题过程中想当然的把 bodyNodes 当成了标签名,实际 bodyNodes 是包含了整个标签的所有属性的一个对象(随意打开的一个网站,东西有点乱,见谅啊)。

bodyNodes 格式

然后任意点开一个标签对象,可以找到一个 localName 属性:

localName 属性

整个 map 结构就像这样:

map 结构

整个解题过程就是这样,其实并不复杂,只是觉得挺有意思的,然后了解了一下 ES6 的 Map 数据结构,所以记录一下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,242评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,834评论 18 399
  • 一、ES6简介 ​ 历时将近6年的时间来制定的新 ECMAScript 标准 ECMAScript 6(亦称 ...
    一岁一枯荣_阅读 6,134评论 8 25
  • 教你如何迅速秒杀掉:99%的海量数据处理面试题 本文经过大量细致的优化后,收录于我的新书《编程之法》第六章中,新书...
    Helen_Cat阅读 7,483评论 1 39
  • 刚刚出来实习的2个月,工作总是不如意的,因为本身是很笨的,经常犯一些低级的错误,然而如你所想,就是经常被教训,也...
    皮卡丘与米拉阅读 348评论 0 0