javascript - Javascript Recussion 错误 - RangeError:超出最大调用堆栈大小
问题描述
我有一个递归会出现这个错误RangeError: Maximum call stack size exceeded
递归函数
window.traverse_all_sublogins = (flat, LOGIN) => {
let sublogins = [LOGIN];
if (flat[LOGIN] && flat[LOGIN].children) {
let children = flat[LOGIN].children;
for (let i of children) {
sublogins = sublogins.concat(traverse_all_sublogins(flat, children[i]));
}
}
return sublogins;
};
平等于如下
{
"account_1": {"login": account_1, "parent": "account_2", "path": [],"children": ["account_3", "account_4"]}
"account_5": {"login": account_5, "parent": "account_6", "path": [],"children": ["account_7", "account_8"]}
}
LOGIN 等于如下
account_1
通过进行我的递归将出现此错误RangeError: Maximum call stack size exceeded,将不胜感激。
提前致谢
解决方案
我假设这是 CoffeeScript。这有效:
traverse_all_sublogins = (flat_login_table, login) ->
sublogins = [login]
if login of flat_login_table
for child in flat_login_table[login].children
sublogins = sublogins.concat(traverse_all_sublogins(flat_login_table, child))
return sublogins
我不知道你从哪里拿来的account_1
,account_5
那是flat
变量,所以为了测试目的,我把它们改成了字符串。同样,我不知道你从哪里拿isEmpty
的,所以我使用了 CoffeeScript 的方式 + 我不在乎 children 列表是否为空,因为迭代空的可迭代对象是什么都不做。
我建议使用比“login”和“flat”或“LOGIN”更好的名称。你的意思是用户名和别名?flat 是您在 JS 中手动遍历的整个 DB 表吗?如果是这样,您可以在 SQL 中编写此函数。在编写多行代码时也请使用显式的“return”,这样更易读。
推荐阅读
- python - ModuleNotFoundError:尝试查找“guessing_game.py”时在“guessing_game”上找不到__path__属性
- git - 合并后 Diff 选项卡中的类别是什么
- r - 在 R 中生成长度为 n 的字符向量的所有可能长度为 1:n 的元素组合的更简单更快的方法
- roblox - 如何通过触摸零件更改 leaderstats 中的值?(罗布乐思)
- html - 如何给类字体大小为 150% 的第一个元素和该元素的第一行红色?
- ruby - 被调用的方法 [name] 在这里定义警告显示没有相应的弃用通知
- r - R闪亮函数列出输入和输出对象
- c# - WinForms,将数据从表单发送到已经存在的表单
- service-worker - 将 PWA 迁移到不同的域?
- javascript - 已解决:React Material UI 在等待数据时在表格中显示进度