繁体   English   中英

JavaScript 减少有/没有初始值的行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM