Javascript 使用递归和reduce进行数组求和
我想做一个递归函数来添加一个数组 下面是我尝试使用的示例阵列: [1,2,3,4,5,5] 因为我在学习,所以我想用reduce来试试。。。有时,它工作得很好:Javascript 使用递归和reduce进行数组求和,javascript,arrays,recursion,Javascript,Arrays,Recursion,我想做一个递归函数来添加一个数组 下面是我尝试使用的示例阵列: [1,2,3,4,5,5] 因为我在学习,所以我想用reduce来试试。。。有时,它工作得很好: const sumItems = function(array) { return array.reduce(function(acc, x) { return acc + (Array.isArray(x) ? sumItems(x) : x); },0); }; 问题是,我很想缩短它。。。大概是这样的: const
const sumItems = function(array) {
return array.reduce(function(acc, x) {
return acc + (Array.isArray(x) ? sumItems(x) : x);
},0);
};
问题是,我很想缩短它。。。大概是这样的:
const sumItems = function(array) {
const reducer = (acc, x) => (acc || 0) + (Array.isArray(x) ? sumItems(x) : x);
return array.reduce(reducer);
};
但那根本不起作用。。。我不知道为什么,尽管我一直在玩弄我的代码、控制台日志等等,但我能得到的最好结果是这样的输出:
[1,2,4,5,
我觉得很有趣
有人知道我如何解决这个问题吗?关于JavaScript,我是否犯了一些我还没有意识到的错误
感谢您抽出时间您不再传递要减少的初始值。这样做,而不是试图在减速器功能内| | 0 acc
const reducer = (acc, x) => acc + (Array.isArray(x) ? sumItems(x) : x);
const sumItems = array => array.reduce(reducer, 0);
// ^
如果没有初始值,reduce将在空数组上失败。您不再传递要reduce的初始值。这样做,而不是试图在减速器功能内| | 0 acc
const reducer = (acc, x) => acc + (Array.isArray(x) ? sumItems(x) : x);
const sumItems = array => array.reduce(reducer, 0);
// ^
如果没有初始值,reduce将在空数组上失败。您需要在reduce方法中设置初始值,否则,如果第一个元素是数组,那么它将在某个迭代中失败并返回NaN,而下一个迭代acc | 0将导致0,因为NaN是falsy值 风险值数据=[ [ [1, 2, [ [3], 4 ]], 5, [] ] ] const sumtimes=函数数组{ const reducer=acc,x=>acc+Array.isArrayx?sumtItemsx:x; //-现在不需要| |-^^^---因为我们已经添加了初始值,所以它将始终是一个数字 //要处理非数字或非数组值,可以将“x”替换为“+x | | 0”,将其处理为“0”` 返回array.reducer,0; //-初始值----^^^-- };
console.logsumitmsdata您需要在reduce方法中设置初始值,否则,如果第一个元素是数组,那么它将在某个迭代中失败并返回NaN,而下一个迭代acc | | 0将得到0,因为NaN是falsy值 风险值数据=[ [ [1, 2, [ [3], 4 ]], 5, [] ] ] const sumtimes=函数数组{ const reducer=acc,x=>acc+Array.isArrayx?sumtItemsx:x; //-现在不需要| |-^^^---因为我们已经添加了初始值,所以它将始终是一个数字 //要处理非数字或非数组值,可以将“x”替换为“+x | | 0”,将其处理为“0”` 返回array.reducer,0; //-初始值----^^^-- };
console.logsumitsdatament将数组中的初始值设置为0。类似于返回数组的reduce函数。reducereducer,0;它会按照你们的期望工作。非常感谢你们,你们两个。我希望我能检查这两个答案来给你评分,它们都很有启发性。在数组中提到初始值为0。reduce函数类似于返回数组。reducereducer,0;它会按照你们的期望工作。非常感谢你们,你们两个。我希望我能核对这两个答案来给你评分,它们都很有启发性。