0%

数组方法之 reduce()

reduce() 方法对数组的每个元素依次执行自定义回调函数,返回值为回调函数 return 的处理结果。
先看一个示例:

1
2
3
4
const arr = [1, 2, 3, 4];
const reduceFn = (accumulator, currentVal) => accumulator + currentVal;
console.log(arr.reduce(reduceFn));// 10
console.log(arr.reduce(reduceFn, 5));// 15

语法:

arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

参数

方法接收两个参数:

  • callback() 回调函数。其接收四个参数:
    1. accumulator:累计器,累计回调函数的值。
    2. current value:当前值。
    3. current index: 当前值的索引。(可选)
    4. souce map: 源数组,也就是调用 reduce() 方法的数组。(可选)
  • initVal: 初始值。(可选)

返回值

回调函数累计处理的结果。

注意

如果传递 initVal,则

  1. accumulator 累计器为 initVal, 不传递则为数组的第一项。
  2. currentVal 当前值为数组第一项,不传递则为数组第二项。
  3. currentIndex 当前索引为数组第一项的索引 0,不传递则为 1。

当给空数组调用 reduce 方法,且不传递初始值时,将报错。
如果数组仅有一个元素,且没有提供初始值,或者提供了初始值,但数组为空,会将唯一值返回,并且 callback 不再执行。

更多 reduce 的使用示例可访问 MDN 之 reduce