Javascript 在JS函数中使用递归的奇怪循环

Javascript 在JS函数中使用递归的奇怪循环,javascript,recursion,Javascript,Recursion,我试图对嵌套数组中的元素求和。例如arraySum([1,2,3,5,4]])应该返回15 除了我试图返回array.pop()+arraySum(array)它进入了一个奇怪的无限循环之外,一切似乎都正常 在代码达到该代码之前,一切都很顺利。我试图返回数组的值,但没有发现任何问题 谁能告诉我我的代码有什么问题吗 var arraySum=函数(数组){ if(array.length==0){ 返回0 } if(Array.isArray(Array[Array.length-1])){ v

我试图对嵌套数组中的元素求和。例如
arraySum([1,2,3,5,4]])
应该返回
15

除了我试图
返回array.pop()+arraySum(array)
它进入了一个奇怪的无限循环之外,一切似乎都正常

在代码达到该代码之前,一切都很顺利。我试图返回数组的值,但没有发现任何问题

谁能告诉我我的代码有什么问题吗

var arraySum=函数(数组){
if(array.length==0){
返回0
}
if(Array.isArray(Array[Array.length-1])){
var x=数组[array.length-1]。reduce((累加器,currentValue)=>累加器+currentValue);
array.pop()
array.push(x)
返回数组sum(数组)
}       
返回array.pop()+arraySum(数组)
};

log(arraySum([1,[2,3],5,[[4]]])
一些真诚的递归解决了我们这里的问题。问题是,您在对数组进行迭代时对其进行了变异,特别是将项推回到数组中。实际上,你不应该这样做

函数数组sum(数组){
if(array.length==0){
返回0;
}
返回数组。减少((上一个,当前)=>{
if(数组isArray(当前)){
返回上一个+arraySum(当前);
}
返回上一个+当前;
}, 0);
}

log(arraySum([1,2,3,5,4]])
您有
if(array.length=0)
(它将
array.length
设置为0,删除数组中的所有内容并计算为0),而不是
if(array.length==0)
a=b
a
设置为
b
a===b
检查
a
b
是否相等。呵呵,很抱歉我修复了它。。。但仍然存在相同的问题:/n您确定已将更改保存到正确的文件中吗?如果您使用
console.log(arraySum([1,2,3,5,[[4]]])
使结果在代码段中可见,它将按预期显示15。刚刚看到它。。。奇怪的在repl.it中,它返回无限循环42 43 44 45 46 47 41 40 38 39 36 37 35 34 33 32 30 31 28 29 48 49 50 51 52 53 54本机浏览器JavaScript内部错误:arraySum:36:1 arraySum:50:24的递归太多…………问题是什么?当我运行您发布的代码片段时,它会按预期返回
15
。谢谢您的回答!非常有教育意义和信息量:)