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

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()

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

猜你喜欢

转载自blog.csdn.net/thirteen_king13/article/details/124821343