Javascript.reduce()未按预期运行?
我试图创建一个函数,该函数将数组作为参数,然后将数组的每个元素乘以其索引,然后求和并返回这些值。然而,我得到了无法解释的回报Javascript.reduce()未按预期运行?,javascript,arrays,function,callback,Javascript,Arrays,Function,Callback,我试图创建一个函数,该函数将数组作为参数,然后将数组的每个元素乘以其索引,然后求和并返回这些值。然而,我得到了无法解释的回报 var sum = 0; function crazy_sum(numbers){ return numbers.reduce(function(previousValue,currentValue,currentIndex,array){ sum += currentValue*currentIndex; return sum;
var sum = 0;
function crazy_sum(numbers){
return numbers.reduce(function(previousValue,currentValue,currentIndex,array){
sum += currentValue*currentIndex;
return sum;
},0);
};
console.log(crazy_sum([2])); //returns 0, as expected
console.log(crazy_sum([2,3])); //returns 3, as expected
console.log(crazy_sum([2,3,5])); //returns 16 when I would expect 13
console.log(crazy_sum([2,3,5,2])); //returns 35 when I would expect 19
为什么我没有得到我期望的结果?函数实际在做什么?您不需要
sum
,请使用previousValue
参数:
function crazy_sum(numbers){
return numbers.reduce(function(previousValue,currentValue,currentIndex,array){
previousValue+= currentValue*currentIndex;
return previousValue;
},0);
};
对于reduce是如何工作的,似乎存在着一个根本性的误解。目前的答案并不反映reduce的简单性 使用
reduce
时,您提供的是两个参数—一个函数回调和一个起始值
回调参数
- previousValue:这是在遍历数组时收集的值。它不是真正的“以前的”-它实际上是相当当前的。将其称为“currentTotal”比之前的值更准确
- currentValue:这只意味着它是我们迭代中的当前值
- indexValue:当前值的索引
- 数组:您正在迭代的数组
function crazy_sum(numbers){
return numbers.reduce(function(currentTotal,currentValue,currentIndex){
return currentTotal + currentValue * currentIndex;
}, 0);
}
有关
reduce
的更多信息,请查看您刚刚添加到sum
变量的。您需要重置sum
以获得所需值。previousValue代表什么?上一次返回?@komali_2:当您使用reduce
参数进行减少时,previousValue
是从循环的上一次迭代返回的值(或第一次迭代的种子值)。