【发布时间】:2016-09-25 03:36:52
【问题描述】:
我正在努力解决 JavaScript 中的代码挑战,我的任务是创建一个名为 reduce 的函数,该函数会将集合缩减为一个值,该值是对我在其上的每个项目调用函数的累积结果已经迭代了。要包含的三个参数是数组、回调和开始。 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);
}
}
【问题讨论】:
-
我认为你不应该使用
Array.prototype.reduce,而是手动迭代数组。是什么让我这么想:start是您解释的索引开始,而不是初始值。 -
你将初始值设置为
0,而不是索引0处的项目,所以你得到0 - 1 - 2 - 3 == -6
标签: javascript arrays reduce