Array 方法 `reduce` 有什么作用?

IT技术 javascript arrays reduce
2021-03-03 08:25:53

我发现了一个非常有用的函数reduce,我正在使用它,但我不确定我是否理解正确。谁能帮我理解这个功能?

例子:

var arr = [ 1, 2, 3, 4, 5, 6 ];
arr.reduce(function(p,n){
    return p + n;
}, 0);
// Output 21

这是我的理解:reduce循环遍历数组的每个元素并返回previous + current value. 前任。0 + 11 + 2等等。在这种情况下,该函数将返回:

[0] - return 1
[1] - return 3
[2] - return 5
[3] - return 7
[4] - return 9
[5] - return 11

接下来是什么?为什么会给出结果21

3个回答

这里获取arr.reduce()将数组减少到一个值,由回调指定。在您的情况下,它基本上会对数组的元素求和。脚步:

  • 在 0,1 上调用函数(0 是.reduce()作为第二个参数传递给的初始值。返回 0 和 1 的总和,即 1。
  • 对上一个结果(即 1 )和下一个数组元素调用函数。这将返回 1 和 2 的总和,即 3
  • 重复直到最后一个元素,总和为 21
现在我明白了。我认为我的例子中的“p”是数组的前一个值。谢谢!
2021-05-15 08:25:53
顺便说一句,初始值(即 0)是可选的,在这个特定的示例中将其省略将产生相同的结果,同时减少一个函数调用。
2021-05-15 08:25:53

reduce() 方法有两个参数:一个为数组中的每个元素调用的回调函数和一个初始值。

回调函数还有两个参数:累加器值和当前值。

数组 ( [1, 2, 3, 4, 5, 6])的流程是这样的:

1. return 0 + 1 // 0 is the accumulator which the first time takes the initial value, 1 is the current value. The result of this becomes the accumulator for the next call, and so on..
2. return 1 + 2 // 1 - accumulator, 2 - current value
3. return 3 + 3 // 3 - accumulator, 3 - current value, etc...
4. return 6 + 4
5. return 10 + 5
6. return 15 + 6

当到达数组末尾时,返回累加器,这里是 21

Introduction to Computer Science运行是基本概念,从开始可以帮助您识别算法的流程甚至复杂性@Steave
2021-05-20 08:25:53

为了更好地理解 reduce 的工作原理,请使用以下sum(a,b)函数,a+b=c它会为它执行的每个操作记录一个类似的文本

function sum(a,b) { 
  const c = a + b;
  console.log(`${a} + ${b} => ${c}`)
  return c;
}

const arr = [1,2,4,8];
const result = arr.reduce(sum);
console.log(`result=${result}`)

这将打印1+2=>3, 3+4=>7,7+8=>15和 最后result=15

最后,有两种极端情况:

  • 数组中有 0 个元素 --> 引发错误。
  • 仅 1 个元素 --> 仅返回元素。