Javascript 为什么这个reduce函数只在指定最后一个参数时才起作用?
reduce方法仍然让我感到困惑。 为什么Javascript 为什么这个reduce函数只在指定最后一个参数时才起作用?,javascript,Javascript,reduce方法仍然让我感到困惑。 为什么 const sumOfCubes = nums => nums.reduce((a,b) => a + Math.pow(b, 3)) 不工作,但是 const sumOfCubes = nums => nums.reduce((a,b) => a + Math.pow(b, 3), 0) 是吗?因为使用reduce时,您应该声明累加器的起始值/默认值。在第二个示例中,您使用传递0作为参数来执行此操作 您可以在此处阅读更多信
const sumOfCubes = nums => nums.reduce((a,b) => a + Math.pow(b, 3))
不工作,但是
const sumOfCubes = nums => nums.reduce((a,b) => a + Math.pow(b, 3), 0)
是吗?因为使用
reduce
时,您应该声明累加器的起始值/默认值。在第二个示例中,您使用传递0
作为参数来执行此操作
您可以在此处阅读更多信息:
正如@VLAZ所建议的,如果您不声明,它将使用数组的第一个元素并跳过它:
初始值可选
用作回调的第一个调用的第一个参数的值。如果未提供initialValue,则将使用并跳过数组中的第一个元素。在没有initialValue的空数组上调用reduce()将引发TypeError
只有一个参数,
array.reduce(fn)
与
for (let i = 1, a = array[0]; i < array.length; ++i)
a = fn(a, array[i]);
for(设i=1,a=array[0];i
因此,在你的例子中,第一个值2永远不会是三次方,所以你得到了错误的和
对于第二个参数,它就像:
for (let i = 0, a = secondParameter; i < array.length; ++i)
a = fn(a, array[i]);
for(设i=0,a=secondParameter;i
因此,在第一次迭代中,当您将其作为第二个参数传递时,要添加的值正确地为0,并且数组中的每个值都将被立方化。如果您不提供初始参数,那么
a
将是数组中的第一个元素。这意味着使用[2,3,4]
时,第一个操作将是2+Math.pow(3,3)
“您需要声明累加器的起始值/默认值是什么”,您不需要这样做。如果不这样做,则将获取数组的第一个元素作为初始值。这可以奏效,但并不总是如此。