javascript - 在 JS 函数中使用递归的奇怪循环
问题描述
我正在尝试对嵌套数组中的元素求和。例如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]]]))
解决方案
一些丰盛的递归在这里解决了我们的问题。问题是您在迭代数组时对其进行了变异,特别是将项目推回其中。在实践中,你永远不应该这样做。
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]]]));
推荐阅读
- vim - 如何在文档的最开头启动 Vim 语法区域,同时在同一位置允许关键字匹配?
- postgresql - 在 postgresql 中喜欢和不喜欢
- python - PyQt5 突出显示选定的 TreeWidget 单元格
- arrays - 获取 json 对象数组并映射到模型类 Laravel
- python - 如何使用 Python 将注册表单连接到 MySQL?
- node.js - express 是怎么知道这个路由的?
- python - execute和execute_script selenium函数python有什么区别
- docker - 在 golang 中导入存档/tar 时 docker run 失败
- applescript - Applescript选择滚动区域中的所有复选框
- java - 当一个项目依赖于其他项目时如何使用gradle构建jar