JavaScript:编写reduce函数,使用减去值

时间:2016-05-26 23:26:16

标签: javascript arrays reduce

我正在努力解决JavaScript中的代码挑战,我的任务是创建一个名为reduce的函数,它将集合减少到一个值,该值是在每个项目上调用函数的累积结果。我已经迭代了。要包括的三个参数是array,callback和start。 Start是要开始的索引,如果不作为参数提供,则默认为索引零。

以下是我目前的情况:

function reduce(array, callback, start) {
    if(typeof start === 'number'){
        var initVal = start;
    } else {
        var initVal = 0;
    }
    return array.reduce(callback, initVal);
}

我有一些测试我可以测试我的解决方案,而我目前的工作是只有一个测试涉及一个减去值的回调函数。以下是我目前失败的测试:

var difference = function(tally, item) {return tally - item; };
var total = reduce([1, 2, 3], difference);
expect(total).to.equal(-4);

非常感谢指导。

编辑添加工作解决方案:

function reduce(array, callback, start) {
    if( typeof start === 'undefined' ){
        return array.reduce(callback);
    } else {
        return array.reduce(callback, start);
    }
}

1 个答案:

答案 0 :(得分:1)

您的代码不起作用,因为您误用了start,它是一个以初始值开头的元素索引。

因此,对于作为输入的[1, 2, 3]数组和作为回调的减法函数,您得到的是:

  1. reducer累加器初始化为0(你实际上不应该做什么)
  2. 0 - 1 -> -1
  3. -1 - 2 -> -3
  4. -3 - 3 -> -6
  5. 你应该做些什么:

    1. 没有传递第三个参数,因此您将从数组的开头进行迭代。
    2. 未明确初始化累加器,因此将第一个元素传递给它,因此acc = 1
    3. 1 - 2 -> -1
    4. -1 - 3 -> -4