常用数组方法
1.map(callbackFn, thisArg)
返回:新数组,每个元素都是回调函数的返回值。
应用:
–格式化数组中的对象
–元素遍历计算
2.flat(depth)
返回:新数组(浅拷贝),根据指定深度递归地将所有子数组元素拼接到新的数组中。
应用:
–默认深度为 1。参数为 Infinity 时,可展开任意深度的嵌套数组。
–在稀疏数组上使用 flat(),删除数组中的空槽。稀疏数组[1, 2, , 4, 5]。
3.flatMap(callbackFn, thisArg)
返回:新数组,数组中每个元素应用给定的回调函数,最后将结果展开一级。
应用
–改变数组的值、添加或删除数组元素。如果要保留该项,则返回一个包含该项的单元素数组,如果要添加元素,则返回一个包含多个元素的数组,如果要删除该项,则返回一个空数组
// 假设我们想要删除所有负数,并将奇数拆分成偶数和 1
const a = [5, 4, -3, 20, 17, -33, -4, 18]
// |\ \ x | | \ x x |
// [4,1, 4, 20, 16, 1, 18]
const result = a.flatMap(n => {
if (n < 0) {
return []
}
return n % 2 === 0 ? [n] : [n - 1, 1]
})
console.log(result) // [4, 1, 4, 20, 16, 1, 18]
4.find(callbackFn, thisArg)
返回:第一个满足回调函数条件的元素,如果没有则返回 undefined。
应用:
–查找数组中符合条件的第一个元素。
5.findIndex(callbackFn, thisArg)
返回:第一个满足回调函数条件的元素的索引,如果没有则返回-1。
应用:
–查找数组中符合条件的第一个元素的索引。
6.forEach(callbackFn, thisArg)
返回: undefined,因此无法链式调用。
应用: 为数组中每个元素执行函数
注意:
–除非抛出异常,否则没有办法停止或中断 forEach()循环,使用 for、for…of 和 for…in 这样的循环语句来实现提前终止。
–forEach() 内部使用同步函数,不会等待 Promise 兑现
7.filter(callbackFn, thisArg)
返回:新数组(浅拷贝),包含所有通过回调函数测试的元素;没有元素通过测试,则返回空数组。
应用: 过滤掉不需要的值
8.some(callbackFn, thisArg)
返回:布尔值,只要有一个元素通过回调函数的测试,就返回 true,否则返回 false。
应用:判断数组中是否存在满足条件的元素。
9.every(callbackFn, thisArg)
返回:布尔值,如果数组中的所有元素都通过回调函数的测试,就返回 true;否则返回 false。
应用: 判断数组中是否所有的元素都满足条件
注意: every 和数学中的全称量词"任意(∀)"类似。对于空数组,它只返回 true
10.includes(searchElement, fromIndex)
返回: 布尔值,判断数组中是否包含指定元素。
应用: 用于判断一个数组是否包含一个指定的值
11.reduce(callbackFn, initialValue)
返回: 累计值
应用:
–reduce() 方法对数组中的每个元素按序执行一个提供的 reducer 函数,每一次运行 reducer 会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。
–求对象数组中值的总和,必须提供一个 initialValue,以便每个项都通过回调函数处理。
const objects = [{ x: 1 }, { x: 2 }, { x: 3 }]
const sum = objects.reduce((accumulator, currentValue) => accumulator + currentValue.x, 0)
console.log(sum) // 6
注意:第一次调用回调时初始化 accumulator 的值。如果指定了 initialValue,则 callbackFn 从数组中的第一个值作为 currentValue 开始执行。如果没有指定 initialValue,则 accumulator 初始化为数组中的第一个值,并且 callbackFn 从数组中的第二个值作为 currentValue 开始执行。
const names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']
const countedNames = names.reduce((allNames, name) => {
const currCount = allNames[name] ?? 0
return {
...allNames,
[name]: currCount + 1
}
}, {})
// countedNames 的值是:
// { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
数组方法中改变原数组的方法有:pop()、push()、reverse()、shift()、sort()、splice()、unshift()