1. for 循环

for (let i = 0; i < arr.length; i++) {console.log(arr[i]);
}
// i :当前元素的索引
// 0 :遍历初始位置(索引)
// arr :遍历的数组
// i < arr.length :遍历的条件,满足该条件执行遍历,否则结束
// i++ :每执行一次后执行的代码
// 耗时 1.61 ms
let ary = []
for (let i = 1; i <= 1000000; i++) {ary.push(i)
}
console.time()
for (let i = 1; i < ary.length; i++) {}
console.timeEnd()

2. for of

for (let item of arr) {console.log(item);
}
// item : 当前元素的值
// arr :遍历的数组
// 耗时 15.77 ms
let ary = []
for (let i = 1; i <= 1000000; i++) {ary.push(i)
}
console.time()
for (let item of ary) {}
console.timeEnd()

3. for in

for (let item in arr) {console.log(item);console.log(arr[item]);
}
// item :当前元素索引
// arr :遍历的数组
// arr[item] :当前元素的值
// 耗时 147.97 ms
let ary = []
for (let i = 1; i <= 1000000; i++) {ary.push(i)
}
console.time()
for (let item in ary) {}
console.timeEnd()

4. forEach

arr.forEach((item, index, arr) => {console.log(item);console.log(index);console.log(arr);
})
// item :必须,当前元素的值
// index :可选,当前元素的索引
// arr :可选,遍历的数组,当前元素所属的数组对象
// 耗时 12.29 ms
let ary = []
for (let i = 1; i <= 1000000; i++) {ary.push(i)
}
console.time()
ary.forEach((item) => {})
console.timeEnd()

5. every

不改变原数组
有返回值,如果数组中所有元素都通过测试,则返回 true ,否则返回 false 且不再往后执行

arr.every((item, index, arr) => item, this)
// item :必须,当前元素的值
// index :可选,当前元素的索引
// arr :可选,遍历的数组,当前元素所属的数组对象
// this :可选,传递给函数用作 "this" 值的值,如果为空,则"undefined"将作为其"this"值传递
// 耗时 10.39 ms
let ary = []
for (let i = 1; i <= 1000000; i++) {ary.push(i)
}
console.time()
ary.every((item, index, arr) => item, this)
console.timeEnd()

6. filter

不会改变原数组。
返回值是数组,通过测试的数组元素组成的新数组,没有通过的元素,返回空数组

arr.filter((item, index, arr) => {console.log(item);console.log(index);console.log(arr);return item === "c"
}, this)
// item :必须,当前元素的值
// index :可选,当前元素的索引
// arr :可选,遍历的数组,当前元素所属的数组对象
// this :可选,传递给函数用作 "this" 值的值,如果为空,则"undefined"将作为其"this"值传递
// 耗时 11.73 ms
let ary = []
for (let i = 1; i <= 1000000; i++) {ary.push(i)
}
console.time()
ary.filter((item, index, arr) => {}, this)
console.timeEnd()

7. map

不改变原数组
返回值是数组,包含原始数据中的每个元素调用提供的函数的结果

arr.map((item, index, arr) => {console.log(item);console.log(index);console.log(arr);return item === "a"
})
// item :必须,当前元素的值
// index :可选,当前元素的索引
// arr :可选,遍历的数组,当前元素所属的数组对象
// 耗时 15.67 ms
let ary = []
for (let i = 1; i <= 1000000; i++) {ary.push(i)
}
console.time()
ary.map((item, index, arr) => {})
console.timeEnd()

8. reduce

reduce() 方法将数组缩减为单个值
函数等返回值存储在累加器中
不会改变原数组
返回值 返回上次调用回调函数的累积结果

 arr.reduce((tot, item, index, arr) => {console.log(tot);console.log(item);console.log(index);console.log(arr);return tot += item
})
// tot : 必须,initialValue ,或函数先前返回的值
// item :必须,当前元素的值
// index :可选,当前元素的索引
// arr :可选,遍历的数组,当前元素所属的数组对象
// this :可选,传递给函数用作 "this" 值的值,如果为空,则"undefined"将作为其"this"值传递
// 耗时 10.96 ms
let ary = []
for (let i = 1; i <= 1000000; i++) {ary.push(1)
}
console.time()
ary.reduce((tot, item, index, arr) => {return tot += item
})
console.timeEnd()

9. some

不改变原数组
数组中存在元素通过测试则返回true,且不再继续执行,否则返回false

arr.some((item, index, arr) => {console.log(item);console.log(index);console.log(arr);return item === "c"
},this)
// item :必须,当前元素的值
// index :可选,当前元素的索引
// arr :可选,遍历的数组,当前元素所属的数组对象
// this :可选,传递给函数用作 "this" 值的值,如果为空,则"undefined"将作为其"this"值传递
// 耗时 10.24 ms
let ary = []
for (let i = 1; i <= 1000000; i++) {ary.push(false)
}
console.time()
ary.some((item, index, arr) => {})
console.timeEnd()

如有错误,欢迎指正,谢谢!
以上内容仅供参考,欢迎大家讨论。

关于 js 数组遍历的几种方式相关推荐

  1. JS数组遍历的几种方式

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

  2. html遍历数组,JS数组遍历的几种方式

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

  3. 【C语言】二维数组遍历的3种方式

    #include <math.h> #include <stdio.h> #include <stdlib.h>#define ROW 2 #define COL ...

  4. php中数组遍历的四种方式

    首先要讲一点的是:PHP中的数组与C/C++中的数组不同. 它是基于键值对结构的hash表来实现的(存在key/value的概念).有点类似于python和lua中的dictionary. 在没有显示 ...

  5. java中数组遍历的三种方式

    使用显示数组 for,for-each,和toString 题目描述 1.for循环遍历 程序: 运行结果: 2.foreach语句遍历 语法格式: 注: 运行结果: 程序: 运行结果: 3.Arra ...

  6. js数组去重的四种方式

    // 删除重复的 function only(arr){for(var i=0;i<arr.length;i++){for(var j = i+1;j<arr.length;j++){if ...

  7. js数组添加元素的几种方式

    方法一:在数组开头添加元素 在数组开头添加元素可以通过 数组名.push()方法来实现,该方法可以接受任意数量的参数逐个添加到数组末尾,并返回修改后数组的长度,改变了原来的数组. var arr=[2 ...

  8. JS数组添加元素的三种方式

    1.push() 结尾添加 arrayObject.push(newelement1,newelement2,....,newelementX) 参数 描述 newelement1 必需.要添加到数组 ...

  9. 【Vue】JS数组添加元素的三种方式

    1.push() 结尾添加 数组.push(元素) 参数 描述 newelement1 必需.要添加到数组的第一个元素. newelement2 可选.要添加到数组的第二个元素. newelement ...

最新文章

  1. Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE解决方法
  2. java反射三种_Java反射
  3. 使用freemarker插入多行数据到word中
  4. TextView 的ScrollView滚动效果
  5. Github标星66.6k+:常见数据结构与算法的Python实现
  6. PHP完整的一次请求过程:请求 dns nginx监听 转发给php-fpm worker处理 返给nginx
  7. ASP.NET几种安全验证方法(一)
  8. 程序员面试金典——17.8最大连续数列和
  9. N35-第十四周作业
  10. VC 2010 Express下安装OpenCV2.4.4 遇到的问题
  11. 【优化算法】Tent混沌映射的粒子群算法【含Matlab源码 940期】
  12. DDNS及端口映射简介
  13. 【方法分享】准大学生如何自学C语言?
  14. 测试听力口语软件,上、英语系学姐最全整理的34个英语学习App 针对听力、口语、阅读...
  15. C# task await 等待任务完成
  16. 事态升级管理程序范本_项目管理事态升级流程
  17. 代码详解设计模式--中介者模式
  18. 什么是共模干扰差模干扰共模信号差模信号
  19. TVS管的参数理解与选型
  20. Position 的四种属性值

热门文章

  1. 中国天气网api接口调用,key获取方式,数据请求秘钥获取,城市id获取方法
  2. PHP 生成带参微信小程序太阳码
  3. 腾讯阿里O2O布局:一个偏2C一个偏2B
  4. java 音频倍速播放_Android MediaPlayer 音频倍速播放,调整播放速度
  5. 10.区块链系列之hardhat部署抵押赎回Fund合约
  6. matlab 把rgb图像转换成灰度图像,出现尝试将 SCRIPT rgb2gray 作为函数执行:
  7. aarch64指令集_ARM与AARCH64指令集优化总结
  8. 时间戳 转换24小时制
  9. [内附完整源码和文档] 基于Qt5的国际跳棋双人网络对战游戏
  10. zemax---Merit Function Editor