html js涨幅率怎么计算,原生 js 计算 html 中出现次数最多的标签

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

题目描述:

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

解题思路:

取到页面中所有标签,这里是会有重复的;

遍历所有标签,统计每个标签出现的次数。

其实统计标签出现的次数很容易想到 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 是包含了整个标签的所有属性的一个对象(随意打开的一个网站,东西有点乱,见谅啊)。

0442debe9054

bodyNodes 格式

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

0442debe9054

localName 属性

整个 map 结构就像这样:

0442debe9054

map 结构

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值