用函数重写reduce方法

时间:2013-12-04 23:50:58

标签: javascript

我试图用这个函数重写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
}  

3 个答案:

答案 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,然后将其传递给回调。