我正在尝试创建一个以数组作为参数的函数,然后将数组的每个元素乘以其索引,然后求和并返回这些值。但是,我得到了无法解释的回报。
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
为什么我没有得到我期望的结果?实际上做的功能是什么?
答案 0 :(得分:3)
您不需要sum
,请使用previousValue
参数:
function crazy_sum(numbers){
return numbers.reduce(function(previousValue,currentValue,currentIndex,array){
previousValue+= currentValue*currentIndex;
return previousValue;
},0);
};
答案 1 :(得分:0)
似乎存在对减少如何运作的根本误解。答案目前并未反映出简化的简单性。
使用reduce
时,您提供的是2个参数 - 函数回调和起始值。
回调参数
通过这些信息,我们可以简化您的操作
function crazy_sum(numbers){
return numbers.reduce(function(currentTotal,currentValue,currentIndex){
return currentTotal + currentValue * currentIndex;
}, 0);
}
有关reduce
的详情,请查看docs