[英]JavaScript reduce behavior with/without an initial value
我正在尝试通过 JavaScript 的reduce
函数对数组的数字平方求和。 但是当使用或不使用初始值调用reduce
方法时,结果会有所不同。
var x = [75, 70, 73, 78, 80, 69, 71, 72, 74, 77];
console.log(x.slice().reduce((ac,n) => ac+(n*n))); // 49179
console.log(x.slice().reduce((ac,n) => ac+(n*n),0)); // 54729
这应该等同于上面的调用:
console.log(x.slice().map(val => val*val).reduce((ac,n) => ac+n)); // 54729
然而,在这种情况下,两种方法都返回相同的值。
console.log([1,2,3].slice().reduce((ac,z) => ac+(z*z))); // 14
console.log([1,2,3].slice().reduce((ac,z) => ac+(z*z), 0)); // 14
为什么前两次调用的结果不同而后两次相同?
如果您不向.reduce()
提供第二个参数,它将使用数组的第一个元素作为累加器并从第二个元素开始。
在第一个示例中, .reduce()
迭代的第一个结果是
75 + 70 * 70
而在第二个版本中,它传入一个显式0
0 + 75 * 75
从中进行的级联计算会导致不同的结果。
在第二个示例中,您将最终计算
1 + 2 * 2
进而
5 + 3 * 3
在第一行,它给出了 14。在第二个版本中,当你从0
开始时,你将计算
0 + 1 * 1
1 + 2 * 2
5 + 3 * 3
这也是 14。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.