JS几种数组遍历方式以及性能分析对比
前言
这一篇与上一篇 JS几种变量交换方式以及性能分析对比 属于同一个系列,本文继续分析JS中几种常用的数组遍历方式以及各自的性能对比
起由
在上一次分析了JS几种常用变量交换方式以及各自性能后,觉得这种方式挺好的,于是抽取了核心逻辑,封装成了模板,打算拓展成一个系列,本文则是系列中的第二篇,JS数组遍历方式的分析对比
JS数组遍历的几种方式
JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比
第一种:普通for循环
代码如下:
for(j = 0; j < arr.length; j++) { }
简要说明:
最简单的一种,也是使用频率最高的一种,虽然性能不弱,但仍有优化空间
第二种:优化版for循环
代码如下:
for(j = 0,len=arr.length; j < len; j++) { }
简要说明:
使用临时变量,将长度缓存起来,避免重复获取数组长度,当数组较大时优化效果才会比较明显。
这种方法基本上是所有循环遍历方法中性能最高的一种
第三种:弱化版for循环
代码如下:
for(j = 0; arr[j]!=null; j++) {}
简要说明:
这种方法其实严格上也属于for循环,只不过是没有使用length判断,而使用变量本身判断
实际上,这种方法的性能要远远小于普通for循环
第四种:foreach循环
代码如下:
arr.forEach(function(e){ });
简要说明:
数组自带的foreach循环,使用频率较高,实际上性能比普通for循环弱
第五种:foreach变种
代码如下:
Array.prototype.forEach.call(arr,function(el){ });
简要说明:
由于foreach是Array型自带的,对于一些非这种类型的,无法直接使用(如NodeList),所以才有了这个变种,使用这个变种可以让类似的数组拥有foreach功能。
实际性能要比普通foreach弱
第六种:forin循环
代码如下:
for(j in arr) {}
简要说明:
这个循环很多人爱用,但实际上,经分析测试,在众多的循环遍历方式中
它的效率是最低的
第七种:map遍历
代码如下:
arr.map(function(n){ });
简要说明:
这种方式也是用的比较广泛的,虽然用起来比较优雅,但实际效率还比不上foreach
第八种:forof遍历(需要ES6支持)
代码如下:
for(let value of arr) { });
简要说明:
这种方式是es6里面用到的,性能要好于forin,但仍然比不上普通for循环
各种遍历方式的性能对比
上述列举了几种方式都有一一做过对比分析,基本上可以得出的结论是:
普通for循环才是最优雅的
(PS:以上所有的代码都只是进行空的循环,没有再循环内部执行代码,仅仅是分析各自循环的时间而已)
性能对比截图
分析结果1
以下截图中的数据是,在chrome (支持es6)中运行了100次后得出的结论(每次运行10次,一共10个循环,得到的分析结果)
可以看出,forin循环最慢。优化后的普通for循环最快
分析结果2
以下截图数据是,在chrome (支持es6)中运行了1000次后得出的结论(每次运行100次,一共10个循环,得到的分析结果)
分析工具示例Demo
如下demo中可以使用分析工具进行 JS数组遍历方式分析对比
Js中几种常用数组遍历方式分析比较工具
原文链接
同步更新到了我个人博客上
Js中几种常用数组遍历方式分析比较博文
转载于:https://www.cnblogs.com/xuyatao/p/7543036.html
JS几种数组遍历方式以及性能分析对比相关推荐
- JS几种数组遍历方式总结
JS数组遍历的几种方式 JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比 第一种:普通for循环 代 ...
- js中遍历数组加到新数组_JS几种数组遍历方式总结
JS数组遍历的几种方式 S数组遍历的几种方式 JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比 第一 ...
- HashMap 的 7 种遍历方式与性能分析!「修正篇」
这是我的第 57 篇原创文章 首先,给大家说声抱歉~ 事情经过是这样子的,五一节前我发布了一篇文章<HashMap 的 7 种遍历方式与性能分析!>,但是好心的网友却发现了一个问题,他说 ...
- HashMap 的 7 种遍历方式与性能分析!(强烈推荐)
来自:Java中文社群 随着 JDK 1.8 Streams API 的发布,使得 HashMap 拥有了更多的遍历的方式,但应该选择那种遍历方式?反而成了一个问题. 本文先从 HashMap 的遍历 ...
- HashMap 的 7 种遍历方式与性能分析!
随着 JDK 1.8 Streams API 的发布,使得 HashMap 拥有了更多的遍历的方式,但应该选择那种遍历方式?反而成了一个问题. 本文先从 HashMap 的遍历方法讲起,然后再从性能. ...
- iterator遍历_HashMap 的 7 种遍历方式与性能分析!(强烈推荐)
随着 JDK 1.8 Streams API 的发布,使得 HashMap 拥有了更多的遍历的方式,但应该选择那种遍历方式?反而成了一个问题. 本文先从 HashMap 的遍历方法讲起,然后再从性能. ...
- WinSock五种I/O模型的性能分析
原文地址:http://club.topsage.com/thread-735498-1-1.html 五种I/O模型的性能分析 重叠I/O模型的另外几个优点在于,微软针对重叠I/O模型提供了一些特有 ...
- 常用条形码扫描器工作方式及性能分析
常用条形码扫描器工作方式及性能分析 1).光笔条形码扫描器 光笔条码扫描器是一种轻便的条形码读入装置.在光笔内部有扫描光束发生器及反射光接收器.目前,市场上出售的这类扫描器有很多种,它们主要在发光的波 ...
- Java集合篇:Map常用遍历方式 以及 性能对比
一.Map集合常用的遍历方式: 遍历Map集合的常用方式有三种:使用keySet的方式,使用entrySet的方式,使用values()取值的方式,这三种方式中,都有对应的for循环遍历和Iterat ...
最新文章
- 目标跟踪算法三:Modeling and Propagating CNNs in a Tree Structure for Visual Tracking (VOT2016冠军)
- 创建docker容器时出现 docker: Error response from daemon, The container name is already in use by container
- inotify加rsync备份mysql_centos7 实现inotify-tools + rsync,自动备份mysql数据库
- Play! Framework 系列(一):初探 play 框架
- Java黑皮书课后题第7章:*7.1(指定等级)编写一个程序读入学生成绩,得到最高分best,然后根据下面的规则给出等级值。程序提示用户输入学生总数,然后提示用户输入所有的分数,最后显示等级给出结论
- map std 浮点数索引_C std :: map持有任何类型的值
- Oracle创建视图的一个问题
- 颜色矩特征提取matlab,求matlab彩色图片的颜色特征提取算法的代码,和纹理特征提取的? 爱问知识人...
- android 代码 安装APK 解决了
- P4055 [JSOI2009]游戏
- php源码怎样打包APP_APP在线打包封装生成源码
- 大四学生发明文言文编程语言,设计思路清奇
- 文献阅读(SRCNN)
- OpenCV每日函数 WeChat QR 微信二维码检测器
- CF1312E Array Shrinking(区间dp模板)
- 河北大学计算机网络卷子,河北大学计算机网络试卷
- Python模块之Pandas模块学习笔记
- 电子管功放制作指南_电子管功放怎么制作 电子管功放制作指南【详解】
- 局域网传输文件_【电脑篇】巧借局域网,告别第三方工具便捷实现电脑间的文件传输...
- 2019暑假五考Ronald(神仙结论题)
热门文章
- Spring Security HttpSecurity
- scrapy pipelines.py
- C语言 指针与字符串
- java 指定字段排序规则_Java之对List里面的元素实现按指定字段排序的方法
- mysql concat键值对_mysql中concat函数实现数据库字段合并查询
- CentOS7.6部署安装ToughRADIUS-v6.1.1.5
- 信息安全完全参考手册之信息安全概述(第一章)
- 什么是应用管理与运维平台(ServiceStage)?
- 性能测试--【MySQL】Sysbench 性能压测
- Linux学习总结(65)——Linux 服务器安全强化的七个步骤