JavaScript: 编写一个 reduce 函数,回调函数减去值有问题
JavaScript: Writing a reduce function, trouble with callback function that subtracts values
我正在努力解决 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);
}
}
您的代码无法正常工作,因为您滥用了 start
,该 start
旨在作为以初始值开头的元素索引。
因此,对于作为输入的 [1, 2, 3]
数组和作为回调的减法函数,您得到的是:
- reducer 累加器初始化为
0
(实际上你不应该这样做)
0 - 1 -> -1
-1 - 2 -> -3
-3 - 3 -> -6
你应该做的是:
- 没有传递第三个参数,因此您从数组的开头开始迭代。
- 累加器没有明确初始化,所以第一个元素被传递给它,因此
acc = 1
1 - 2 -> -1
-1 - 3 -> -4
我正在努力解决 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);
}
}
您的代码无法正常工作,因为您滥用了 start
,该 start
旨在作为以初始值开头的元素索引。
因此,对于作为输入的 [1, 2, 3]
数组和作为回调的减法函数,您得到的是:
- reducer 累加器初始化为
0
(实际上你不应该这样做) 0 - 1 -> -1
-1 - 2 -> -3
-3 - 3 -> -6
你应该做的是:
- 没有传递第三个参数,因此您从数组的开头开始迭代。
- 累加器没有明确初始化,所以第一个元素被传递给它,因此
acc = 1
1 - 2 -> -1
-1 - 3 -> -4