热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JS数组遍历时间比较

JS数组遍历时间比较不多bb,先说结论,常规for循环优化版倒序最快,for…in最慢,其是前者的400倍左右!先说下常用

JS数组遍历时间比较



不多bb,先说结论,常规for循环优化版倒序最快,for…in最慢,其是前者的400倍左右!


先说下常用的遍历数组方式


  • 常规for循环
  • 常规for循环优化版
  • 常规for循环优化版倒序
  • 常规for循环直到数组长度
  • foreach
  • for…in
  • for…of

先来个数组当小白鼠

let arr = [];
for (let i = 0; i < 10000000; i++) {arr[i] = i;
}



定义两个接收时间的变量

let t1;//开始时间
let t2;//结束时间

接下来就是测试了

(浏览器分别是火狐和谷歌,火狐在前;分别测五次)
(白色火狐,深色谷歌)


1.常规for循环

{t1 = new Date().getTime();for (let i = 0; i < arr.length; i++) {}t2 = new Date().getTime();console.log("普通for:" + (t2 - t1));}

在这里插入图片描述在这里插入图片描述


2.常规for循环优化版

{t1 = new Date().getTime();for (let i = 0, len = arr.length; i < len; i++) {}t2 = new Date().getTime();console.log("改进for:" + (t2 - t1));}

在这里插入图片描述在这里插入图片描述


3.常规for循环优化版倒序

{t1 = new Date().getTime();let len;for (let len = arr.length; len > 0; len--) {}t2 = new Date().getTime();console.log("常规for循环优化版倒序:" + (t2 - t1) + "ms");}

在这里插入图片描述

在这里插入图片描述


4.常规for循环直到数组长度

{t1 = new Date().getTime();for (let i = 0; arr[i] != null; i++) {}t2 = new Date().getTime();console.log("常规for循环直到数组长度:" + (t2 - t1) + "ms");}

在这里插入图片描述
在这里插入图片描述


5.foreach

{t1 = new Date().getTime();arr.forEach((element, index) => {});t2 = new Date().getTime();console.log("foreach:" + (t2 - t1) + "ms");}

在这里插入图片描述在这里插入图片描述


6.for…in

{t1 = new Date().getTime();for (let i in arr) {}t2 = new Date().getTime();console.log("for in:" + (t2 - t1) + "ms");}

在这里插入图片描述
注意,火狐此测试的数组长度是其他测试长度(10000000)的百分之1
在这里插入图片描述


7.for…of

{t1 = new Date().getTime();for (let i of arr) {//i位数组对象}t2 = new Date().getTime();console.log("for of:" + (t2 - t1) + "ms");}

在这里插入图片描述在这里插入图片描述
到此,所有测试完毕。再次注意,forin的火狐测试数组长度是其他测试的百分之1(因为火狐太慢了)


总结

提示:所测试的数组长度为10000000,但测试forin火狐浏览器时改成百分之1(因为太慢了),其下表时间乘以100


火狐时间(多次平均)ms谷歌时间(多次平均) ms
常规for循环1012
常规for循环优化版9.212.2
常规for循环优化版倒序8.210.4
for直到数组长度23.69.4
foreach37.8121.8
for…in36203847.6
for…of195.2158

综上所述


常规for循环优化版倒序 综合最快

for (let len = arr.length; len > 0; len--) {}

for…in 最慢

for (let i in arr) {//i为索引}

推荐阅读
  • PHP引用的概念和用法详解
    本文详细介绍了PHP中引用的概念和用法。引用是指不同的变量名访问同一个变量内容,类似于Unix文件系统中的hardlink。文章从引用的定义、作用、语法和注意事项等方面进行了解释和示例。同时还介绍了对未定义变量使用引用的情况,以及在函数和new运算符中使用引用的注意事项。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
  • 本文总结和分析了JDK核心源码(2)中lang包下的基础知识,包括常用的对象类型包和异常类型包。在对象类型包中,介绍了Object类、String类、StringBuilder类、StringBuffer类和基本元素的包装类。在异常类型包中,介绍了Throwable类、Error类型和Exception类型。这些基础知识对于理解和使用JDK核心源码具有重要意义。 ... [详细]
  • 本文介绍了如何对PHP二维数组进行排序以及如何获取最大值。同时还提到了在数据分析系统中使用排序的实例,以及如何统计角色等级和创建角色总数。 ... [详细]
  • 简述在某个项目中需要分析PHP代码,分离出对应的函数调用(以及源代码对应的位置)。虽然这使用正则也可以实现,但无论从效率还是代码复杂度方面考虑ÿ ... [详细]
  • PHP小习题:PHP小练习题前几天在百度知道里面看到有位网友询问如何制作一下的小程序:用php语言设计一个小程序,计算今天到达下月的天数、全部输出这些天数,并使得每天的日期以三种颜 ... [详细]
  • 可空类型可空类型主要用于参数类型声明和函数返回值声明。主要的两种形式如下: ... [详细]
author-avatar
mobiledu2502884967
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有