我正在尝试对嵌套数组中的元素求和。例如arraySum([1,[2,3],5,[[4]]])
应该返回15
除我尝试return array.pop() + arraySum(array)
之外,其他所有事情似乎都没问题。
一切顺利,直到代码到达该代码为止。我试图返回数组的值,但我完全看不到任何问题。
谁能告诉我我的代码出了什么问题?
var arraySum = function(array) {
if(array.length === 0){
return 0
}
if(Array.isArray(array[array.length - 1])){
var x = array[array.length - 1].reduce((accumulator, currentValue) => accumulator + currentValue);
array.pop()
array.push(x)
return arraySum(array)
}
return array.pop() + arraySum(array)
};
console.log(arraySum([1,[2,3],5,[[4]]]))
答案 0 :(得分:1)
一些热烈的递归在这里解决了我们的问题。问题是您在对数组进行迭代的同时对其进行了变异,特别是将项目推回了数组。实际上,您绝对不应这样做。
function arraySum(array) {
if (array.length === 0) {
return 0;
}
return array.reduce((previous, current) => {
if (Array.isArray(current)) {
return previous + arraySum(current);
}
return previous + current;
}, 0);
}
console.log(arraySum([1, [2, 3], 5, [[4]]]));