1.for循环
// 使用临时变量,将长度缓存下来,避免重复获取数组长度,当数组较大时优化效果明显
const len = arr.length;
for (let i = 0; i < len; i++) {
// ...
}
for循环、for...in、for...of能正确响应break、continue和return语句,但forEach不行。
2.for...in
for (let item in arr) {
// ...
}
for...in循环效率是最低的
3.forEach
- forEach不会对空数组进行检测
- 不能在它的循环体中使用 await
- 不能提前退出 .forEach() 循环。而在 for 循环中可以使用 break
arr.forEach((item, index, arr) => {
// ...
})
item:每个元素, index:每个元素在数组中下标, arr:数组本身
4.map
- map有返回值
- map和forEach都不会对空数组进行检测
- map不会改变原数组
const res = arr.map((item, index, arr) => {
return item * 2;
});
5.for...of
- 只有可迭代对象(iterator)才能使用(Array、Map、Set、String、TypedArray、arguments对象等等)
- 可以使用 await
- 可以使用break提前退出循环
for (let i of arr) {
// ...
}
6.filter
接收回调函数作为参数,返回值是一个新数组
- filter不会对空数组进行检测
- filter不会改变原始数组
const res = arr.filter(item => {
// ...
});
7.every 如果每一项返回true, 则返回true(全部符合条件) 如果存在一项返回false, 则返回false, 并中止循环
- every不会对空数组进行检测
- every不会改变原始数组
const res = arr.every((item, index, arr) => {
return item > 3;
})
8.some 如果某一项返回true, 则返回true, 并中止循环 如果全部返回false, 则返回false
- some不会对空数组进行检测
- some不会改变原始数组
const res = arr.some((item, index, arr) => {
return item > 3;
})
9.reduce reduce顺着挨个累加,对于空数组是不会执行回调函数
const arr = [1,2,3];
// 没有指定初始值
arr.reduce((initalValue, currentValue, index, arr) => {
console.log(initalValue); // 第一次循环,initalValue = 1
});
// 给了初始值之后
arr.reduce((initalValue, currentValue, index, arr) => {
console.log(initalValue); // 第一次循环,initalValue = 10
}, 10);
10.reduceRight reduceRight倒着挨个累加,遍历的是空数组的话,不会执行
const arr = [1,2,3];
// 没有指定初始值
arr.reduceRight((initalValue, currentValue, index, arr) => {
console.log(initalValue); // 第一次循环,initalValue = 3
});
// 给了初始值之后
arr.reduceRight((initalValue, currentValue, index, arr) => {
console.log(initalValue); // 第一次循环,initalValue = 10
}, 10);
11.find 找到符合条件的第一项,没找到返回undefined, 对于空数组是不会执行的,不会改变原数组
const item = arr.find(item => {
return item.name === 'name'
})
12.findIndex 返回符合条件的第一项的下标,没有则返回-1,对于空数组是不会执行的,不会改变原数组
const findIndex = arr.findIndex(item => {
return item.name === 'name'
})
13.keys、values、entries 他们都返回一个遍历器对象,可以用for...of循环遍历 keys-返回元素索引 values-返回元素本身 entries-返回元素和下标
const arr = ['a', 'b', 'c'];
for (let index of arr.keys()) {
// ...
// 0
// 1
// 2
}
for (let ele of arr.values()) {
// ...
// a
// b
// c
}
for (let [index, ele] of arr.entries()) {
// ...
// 0 'a'
// 1 'b'
// 2 'c'
}