数组的遍历方法
下面是总结的数组遍历的常见方法
for循环
- 标准for循环
- forEach((当前值, 当前索引, 当前数组) => {…}, [, 绑定的this])`
- 无法中途退出循环,只能用 return 退出本次回调,进行下一次回调
- 它总是返回 undefined 值,即使你 return 了一个值
- for…in(不推荐)会把继承链的对象属性都会遍历一遍,而且数组遍历不一定按次序
- for-in 循环返回的是所有能通过对象访问的、可枚举的属性
- for (variable of iterable)(ES6)可迭代Array,Map,Set,String等(迭代的是值value)
- 在 for..of 中如果遍历中途要退出,可以使用 break 退出循环
ES5
map (不改变原数组) 会给原数组中的每个元素都按顺序调用一次 callback 函数
reduce (不改变原数组) 数组中的前项和后项做某种计算,并累计最终值。
1
2
3
4
5
6
7
8
9// 语法:
// arr.reduce(function(total, currentValue, currentIndex, arr), initialValue)
// callback 参数
// (累积器, 当前元素, 当前元素索引, 当前数组)
// initialValue:指定第一次回调 的第一个参数
var wallets = [4, 7.8, 3]
var totalMoney = wallets.reduce(function (countedMoney, curMoney) {
return countedMoney + curMoney;
}, 0)filter (不改变原数组)
1
2
3
4var arr = [2, 3, 4, 5, 6]
var morearr = arr.filter(function (number) {
return number > 3
}) // [4,5,6]every (不改变原数组) 测试数组的所有元素是否都通过了指定函数的测试
- 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测
- 如果所有元素都满足条件,则返回 true
1
2
3
4var arr = [1,2,3,4,5]
var result = arr.every(function (item, index) {
return item > 2
}) // falsesome (不改变原数组) 测试是否至少有一个元素通过 callback 中的条件。对于放在空数组上的任何条件,此方法返回 false
- 如果有一个元素满足条件,则表达式返回true, 剩余的元素不会再执行检测
- 如果没有满足条件的元素,则返回false
1
2
3
4
5
6
7
8// some(callback, thisArg)
// callback:
// (当前元素, 当前索引, 调用some的数组)
var arr = [1,2,3,4,5]
var result = arr.some(function (item,index) {
return item > 3
}) // true
ES6
find() & findIndex() 根据条件找到数组成员
- find 定义:用于找出第一个符合条件的数组成员,并返回该成员,如果没有符合条件的成员,则返回 undefined
- findIndex 定义:返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1
1
2
3
4
5
6
7
8
9
10
11
12// 语法
let new_array = arr.find(function(currentValue, index, arr), thisArg)
let new_array = arr.findIndex(function(currentValue, index, arr), thisArg)
// 这两个方法都可以识别NaN,弥补了indexOf的不足
// find
let a = [1, 4, -5, 10].find((n) => n < 0); // 返回元素-5
let b = [1, 4, -5, 10,NaN].find((n) => Object.is(NaN, n)); // 返回元素NaN
// findIndex
let a = [1, 4, -5, 10].findIndex((n) => n < 0); // 返回索引2
let b = [1, 4, -5, 10,NaN].findIndex((n) => Object.is(NaN, n)); // 返回索引4keys() & values() & entries() 遍历键名、遍历键值、遍历键名+键值
- 三个方法都返回一个新的 Array Iterator 对象,对象根据方法不同包含不同的值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20// 语法
array.keys() array.values() array.entries()
for (let index of ['a', 'b'].keys()) {
console.log(index);
}
// 0
// 1
for (let elem of ['a', 'b'].values()) {
console.log(elem);
}
// 'a'
// 'b'
for (let [index, elem] of ['a', 'b'].entries()) {
console.log(index, elem);
}
// 0 "a"
// 1 "b"