Javascript 试图理解如何使用u0.reduce
我试图解决这个问题: 使用u.reduce将数组中的所有值相乘 以下是我的想法:Javascript 试图理解如何使用u0.reduce,javascript,underscore.js,reduce,Javascript,Underscore.js,Reduce,我试图解决这个问题: 使用u.reduce将数组中的所有值相乘 以下是我的想法: var product = _.reduce([1, 2, 3], function(x, y){ return x * y; }, 0); = 9 离这儿近吗?我觉得我没有吃饱。请帮忙 您应该在调用.reduce时忽略最后一个0参数,或者将其替换为1,这取决于如果要提供空数组,您希望实现的语义 而不是在回调中考虑变量 x>代码>和 y>代码>,将它们视为累加器< /代码>和当前< /代码>。在第一次传递中,“初
var product = _.reduce([1, 2, 3], function(x, y){ return x * y; }, 0);
= 9
离这儿近吗?我觉得我没有吃饱。请帮忙 您应该在调用
.reduce
时忽略最后一个0
参数,或者将其替换为1
,这取决于如果要提供空数组,您希望实现的语义
<>而不是在回调中考虑变量<代码> x>代码>和<代码> y>代码>,将它们视为<代码>累加器< /代码>和<代码>当前< /代码>。在第一次传递中,“初始值”参数作为累加器传递
,在随后的每次传递中,上一次传递的结果作为累加器提供
您错误提供的0
将作为累加器的第一个值传递,因此每个后续乘法也会导致0
幸运的是,reduce
的规范指出,如果省略该初始值参数,那么它将使提供的数组的第一个元素位于累加器的初始值中,然后仅从第二个元素开始迭代
如果不提供初始值,则数组中必须至少包含一个元素。第三个参数是起始值。在这种情况下,您想使用1
@Phylogenesis,实际上他应该完全忽略最后的“初始值”参数,reduce
的定义是,如果没有初始值,它将第一个数组值作为“初始值”,然后从第二个值迭代onwards@Alnitak很公平。但是,代码不起作用的原因是第三个参数设置为0
,它实际上返回0*1*2*3
。我假设=9
是一个打字错误,您实际上是指=0
?@Phylogenesis这是根本原因,但将值设置为1
不是正确的修复方法,因为说空集的乘积是1在数学上是不正确的。任何空集的乘积都是未定义的。