简介

reduce 的原型链是 Array.prototype.reduce(),由此我们可以知道 reduce 只能在数组上使用。

官方的解释:reduce() 方法对数组中的每个元素执行一个由您提供的 reducer 函数(升序执行),将其结果汇总为单个返回值。

语法

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

参数

reduce - 图1

返回值

函数累计处理的结果

描述

reduce 为数组中的每一个元素依次执行 callback 函数,不包括数组中被删除或从未被赋值的元素。

callback 函数第一次执行时的两种情况:
reduce - 图2
总结:

  1. 如果没有提供 initialValuereduce 会从索引 1 的地方开始执行 callback 方法,跳过第一个索引。如果提供 initialValue,从索引 0 开始。
  2. 如果数组为空且没有提供 initialValue,会抛出 TypeError
  3. 如果数组仅有一个元素并且没有提供 initialValue,或者有提供 initialValue 但是数组为空,那么此唯一值将被返回,并且 callback 不会被执行。
  4. 提供初始值通常更安全。

    reduce() 如何运行

    例子

    数组里所有值的和

    累加对象数组里的值

    将二维数组转化为一维

    计算数组中每个元素出现的次数

    按属性对 object 分类

    使用扩展运算符和initialValue绑定包含在对象数组中的数组

    数组去重

    按顺序运行 Promise

    功能型函数管道

    使用 reduce 实现 map