我正在努力解决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);
}
}
答案 0 :(得分:1)
您的代码不起作用,因为您误用了start
,它是一个以初始值开头的元素索引。
因此,对于作为输入的[1, 2, 3]
数组和作为回调的减法函数,您得到的是:
0
(你实际上不应该做什么)0 - 1 -> -1
-1 - 2 -> -3
-3 - 3 -> -6
你应该做些什么:
acc = 1
1 - 2 -> -1
-1 - 3 -> -4