美文网首页
原生 js 计算 html 中出现次数最多的标签

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

作者: 我不是黄悠然 | 来源:发表于2017-08-04 19:06 被阅读0次

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

题目描述:
请使用原生 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 数据结构,所以记录一下。

相关文章

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

    前几天学姐跟我讨论了一道题,觉得还挺有意思的。 题目描述:请使用原生 JavaScript 实现一个方法,判断 h...

  • HTML标签的相关操作判断

    统计HTML标签中以b开头的标签数量 统计HTML标签中出现次数最多的标签 判断DOM标签的合法性 如标签的闭合、...

  • js 统计页面标签种类及数量

    统计页面标签种类 统计页面中每个标签的出现次数,及出现次数最多的标签 第一步:取得页面所有的标签 第二步:取得标签...

  • js常用技巧一

    目录 一.JS中判断字符串中出现次数最多的字符及出现的次数 二.JS数组去重 三.类的继承 四.排序算法 一.JS...

  • jQuery常用方法

    jQuery操作标签的内容 html()方法 相当于原生JS中的innerHTML属性,用来获取或者设置标签内部的...

  • 算法练习19:计算出当前网站出现过的所有标签

    计算出当前网站出现过的所有标签 淘宝首页计算标签数: 扩展:计算出出现最多次的前3种标签 淘宝首页计算出现最多的三...

  • JavaScript

    如何插入JS 使用 标签在HTML网页中插入JavaScript代码。 标签要成对出现,并把JavaScript代...

  • HTML DOM的增删改查总结(查找)

    查找 HTML 元素 1. 原生js 通过 id 查找 HTML 元素 通过标签名找到 HTML 元素 通过类名找...

  • 2018-09-12学习JavaScript

    一、如何插入JS 使用 标签在HTML网页中插入JavaScript代码。注意, 标签要成对出现,并把JavaS...

  • Vue 引入原生百度地图

    1.在 public/index.html 中的 head 标签结尾,为了引入原生外部 js ,需添加以下代码: ...

网友评论

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

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