我试图用这个函数重写reduce方法。看起来我只有一半,除了它只从initialValue(10)中减去数组中的最后一个元素,如何从initialValue中减去所有数字?
reduce([1, 2, 3], function(total, number) {
return total - number;
}, 10); // should return 4
function reduce(array,callback,initialValue){
var sum;
for(var i = 0; i < array.length; i++){
sum = callback(initialValue,array[i])
}
return sum
}
答案 0 :(得分:2)
您必须在每一步都使用更新总和调用回调。进行更改的最简单方法可能是设置sum=initialValue
,如下所示,
reduce([1, 2, 3], function(total, number) {
return total - number;
}, 10); // should return 4
function reduce(array,callback,initialValue){
var sum = initialValue;
for(var i = 0; i < array.length; i++){
sum = callback(sum,array[i]);
}
return sum;
}
答案 1 :(得分:1)
初始值可能会丢失,更准确的版本将是这样的:
reduce = function(ary, callback, init) {
var i = 0;
if (arguments.length < 3)
init = ary[i++];
for (; i < ary.length; i++)
init = callback(init, ary[i], i);
return init;
}
对于100%符合规范的版本,请参阅Mozilla shim
答案 2 :(得分:0)
您继续将initialValue
传递给回调。而是先将sum
设置为initialValue
,然后将其传递给回调。