我正在尝试使用递归编写reduce函数。我正在学习递归及其练习的一部分,所以我试图理解它在我的代码中不起作用的是什么。任何帮助都很高兴! PS。它假设从数组的末尾开始(例如,yeh变得嘿)
var strings = function(previous,current) {
return previous+current;
};
function reducing(arr,start,func) {
if (arr.length == 0) {
return start;
}
else if (arr.length == 1) {
return arr[0];
}
else {
return func(start,arr[arr.length-1]) + reducing(arr.slice(1),start,func);
}
}
reducing(['y','e','h'],'',strings)
答案 0 :(得分:1)
这可能是问题,而不是减少(arr.slice(1),start,func)尝试减少(arr.slice(0,arr.length-1),start,func),如下所示:
function reducing(arr,start,func) {
if (arr.length == 0) {
return start;
}
else if (arr.length == 1) {
return arr[0];
}
else {
return func(start, arr[arr.length-1]) + reducing(arr.slice(0, arr.length -1),start,func);
}
}
答案 1 :(得分:0)
另一种解决方案:
const reduce = (arr, fn, initial) =>
(reduceAux = (index, value) =>
index > arr.length-1
? value
: reduceAux(index+1, fn(value, arr[index], index, value))
)(0, initial);