今天我们将讨论减少 Javascript 数组的方法,以及我们如何使用它来将数组减少为单个值。所有编写的代码片段都是用 Javascript 语言编写的。要理解本文并有效地实施该方法,需要具备基本的语言知识。
reduce Javascript 数组方法是函数式编程的重要组成部分,它接受一个数组并将其缩减为一个值。这是通过依次对数组的每个元素运行回调函数,并将计算结果传递给它之前的元素来实现的。
const array1 = [1, 2, 3, 4]; // 0 + 1 + 2 + 3 + 4 const initialValue = 0; const sumWithInitial = array1.reduce((accumulator, currentValue) => accumulator + currentValue, initialValue) console.log(sumWithInitial); // expected output: 10
上面的代码片段是一个数字数组;当我们调用它的 reduce 方法时,它获取整个数组并只返回一个值 10。
如果我们必须正确使用该方法,那么非常具体地了解“reduce”Javascript 参数是什么非常重要。下面我突出显示了这些参数;我们将一个接一个地学习它们,然后最后将所有内容放在一起以理解它。
回调函数
此函数对数组中的每个项目运行。在随后的回调 Fn 执行中,其返回值更改为累加器参数的值。最终调用的返回值更改为 reduce()。
调用函数时提供以下参数:
累加器
这是最后一次调用回调 Fn 的结果,以值表示。如果提供,则在第一次调用时使用 initialValue;如果不是,则使用 array[0]。
当前值
这是当前元素的值。如果提供了 initialValue,则索引 0 (array[0]) 上的数组的值将在第一次调用时返回;如果不是,将返回索引 1 (array[1])。
当前索引
这是数组的当前值的索引位置。如果在第一次调用时给出了 initialValue,它的位置将在索引 0 上;否则,它将在索引 1 上。
大批
这只是使用了 reduce() 方法的数组。
初始值
用于在第一次回调时初始化累加器的值。如果提供了 initialValue,callbackFn 开始运行时会将 currentValue 设置为数组的第一个元素。如果省略 initialValue,则累加器设置为数组的第一个值,并且 callbackFn 开始运行,currentValue 设置为数组的第二个值。如果在这种情况下数组为空(即没有初始项作为累加器返回),则会引发错误。
把一切放在一起
reduce(Function (accumulator, currentValue, currentIndex, array) { /* … */ }, initialValue)
所有这些参数的组合应该看起来就像上面的代码片段。
让我们更深入地研究这个简化的 Javascript 方法,看看幕后发生了什么。
const array1 = [1, 2, 3, 4]; // 0 + 1 + 2 + 3 + 4 const initialValue = 0; const sumWithInitial = array1.reduce( (accumulator, currentValue) => accumulator + currentValue, initialValue );
reduce Javascript 方法所做的就是循环遍历项目,每次循环遍历我们都会返回一个单独的项目,并获得从 reduce() 返回的先前值。如果它是 reduce() 中的第一项,我们只会返回零,因为这是我们的默认值。例如,如果我们将默认值更改为 50,则会影响数组。
我们取零或默认数字并将其添加到我们的第一项;在前面的代码中,我们会得到一个总和为 1 的值。我们对下一个项目再次执行此操作,即 2。我们将 1 + 2 相加得到 3;我们继续这个过程,直到我们到达最后一个项目。
| 累加器 | 当前值 | 指数 | 返回值 |
---|---|---|---|---|
第一次通话 | 0 | 1个 | 0 | 1个 |
第二次通话 | 1个 | 2个 | 1个 | 3个 |
第三次通话 | 3个 | 3个 | 2个 | 6个 |
第四次通话 | 6个 | 4个 | 3个 | 10 |
上表更清楚地说明了我们每次使用此方法时会发生什么。请注意,此结果会因 initialValue 而异。
最后一点,reduce Javascript 是一种迭代方法。它通过按升序索引顺序对每个元素应用“reducer”回调函数,将数组的所有项目收集到一个值中。当再次调用 callbackFn 时,callbackFn 返回值始终作为累加器提供。 Reduce 从累加器的最后一个值返回其返回值,该值是数组最后一次迭代时从回调 Fn 返回的值 ()。
虽然作为 callback-Fn 提供的函数可以修改,但调用它的数组 reduce() 不能。但是,请注意,数组的长度在执行初始回调 Fn 之前会保留下来。