前言

这一篇与上一篇 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几种数组遍历方式以及性能分析对比相关推荐

  1. JS几种数组遍历方式总结

    JS数组遍历的几种方式 JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比 第一种:普通for循环 代 ...

  2. js中遍历数组加到新数组_JS几种数组遍历方式总结

    JS数组遍历的几种方式 S数组遍历的几种方式 JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比 第一 ...

  3. HashMap 的 7 种遍历方式与性能分析!「修正篇」

    这是我的第 57 篇原创文章 首先,给大家说声抱歉~ 事情经过是这样子的,五一节前我发布了一篇文章<HashMap 的 7 种遍历方式与性能分析!>,但是好心的网友却发现了一个问题,他说 ...

  4. HashMap 的 7 种遍历方式与性能分析!(强烈推荐)

    来自:Java中文社群 随着 JDK 1.8 Streams API 的发布,使得 HashMap 拥有了更多的遍历的方式,但应该选择那种遍历方式?反而成了一个问题. 本文先从 HashMap 的遍历 ...

  5. HashMap 的 7 种遍历方式与性能分析!

    随着 JDK 1.8 Streams API 的发布,使得 HashMap 拥有了更多的遍历的方式,但应该选择那种遍历方式?反而成了一个问题. 本文先从 HashMap 的遍历方法讲起,然后再从性能. ...

  6. iterator遍历_HashMap 的 7 种遍历方式与性能分析!(强烈推荐)

    随着 JDK 1.8 Streams API 的发布,使得 HashMap 拥有了更多的遍历的方式,但应该选择那种遍历方式?反而成了一个问题. 本文先从 HashMap 的遍历方法讲起,然后再从性能. ...

  7. WinSock五种I/O模型的性能分析

    原文地址:http://club.topsage.com/thread-735498-1-1.html 五种I/O模型的性能分析 重叠I/O模型的另外几个优点在于,微软针对重叠I/O模型提供了一些特有 ...

  8. 常用条形码扫描器工作方式及性能分析

    常用条形码扫描器工作方式及性能分析 1).光笔条形码扫描器 光笔条码扫描器是一种轻便的条形码读入装置.在光笔内部有扫描光束发生器及反射光接收器.目前,市场上出售的这类扫描器有很多种,它们主要在发光的波 ...

  9. Java集合篇:Map常用遍历方式 以及 性能对比

    一.Map集合常用的遍历方式: 遍历Map集合的常用方式有三种:使用keySet的方式,使用entrySet的方式,使用values()取值的方式,这三种方式中,都有对应的for循环遍历和Iterat ...

最新文章

  1. 目标跟踪算法三:Modeling and Propagating CNNs in a Tree Structure for Visual Tracking (VOT2016冠军)
  2. 创建docker容器时出现 docker: Error response from daemon, The container name is already in use by container
  3. inotify加rsync备份mysql_centos7 实现inotify-tools + rsync,自动备份mysql数据库
  4. Play! Framework 系列(一):初探 play 框架
  5. Java黑皮书课后题第7章:*7.1(指定等级)编写一个程序读入学生成绩,得到最高分best,然后根据下面的规则给出等级值。程序提示用户输入学生总数,然后提示用户输入所有的分数,最后显示等级给出结论
  6. map std 浮点数索引_C std :: map持有任何类型的值
  7. Oracle创建视图的一个问题
  8. 颜色矩特征提取matlab,求matlab彩色图片的颜色特征提取算法的代码,和纹理特征提取的? 爱问知识人...
  9. android 代码 安装APK 解决了
  10. P4055 [JSOI2009]游戏
  11. php源码怎样打包APP_APP在线打包封装生成源码
  12. 大四学生发明文言文编程语言,设计思路清奇
  13. 文献阅读(SRCNN)
  14. OpenCV每日函数 WeChat QR 微信二维码检测器
  15. CF1312E Array Shrinking(区间dp模板)
  16. 河北大学计算机网络卷子,河北大学计算机网络试卷
  17. Python模块之Pandas模块学习笔记
  18. 电子管功放制作指南_电子管功放怎么制作 电子管功放制作指南【详解】
  19. 局域网传输文件_【电脑篇】巧借局域网,告别第三方工具便捷实现电脑间的文件传输...
  20. 2019暑假五考Ronald(神仙结论题)

热门文章

  1. Spring Security HttpSecurity
  2. scrapy pipelines.py
  3. C语言 指针与字符串
  4. java 指定字段排序规则_Java之对List里面的元素实现按指定字段排序的方法
  5. mysql concat键值对_mysql中concat函数实现数据库字段合并查询
  6. CentOS7.6部署安装ToughRADIUS-v6.1.1.5
  7. 信息安全完全参考手册之信息安全概述(第一章)
  8. 什么是应用管理与运维平台(ServiceStage)?
  9. 性能测试--【MySQL】Sysbench 性能压测
  10. Linux学习总结(65)——Linux 服务器安全强化的七个步骤