Javascript恢复错误-RangeError:超过最大调用堆栈大小
我有一个递归,该递归将指向此错误RangeError:超出了最大调用堆栈大小 递归函数Javascript恢复错误-RangeError:超过最大调用堆栈大小,javascript,Javascript,我有一个递归,该递归将指向此错误RangeError:超出了最大调用堆栈大小 递归函数 window.traverse_all_sublogins = (flat, LOGIN) => { let sublogins = [LOGIN]; if (flat[LOGIN] && flat[LOGIN].children) { let children = flat[LOGIN].children; for (let i of c
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"]}
}
登录时与下面相同
account_1
通过进入我的递归,将出现此错误RangeError:超出了最大调用堆栈大小,我们将非常感谢您的帮助
提前感谢虽然这看起来不像javascript,但如果是javascript,这可能就是您想要的 另外,最大调用堆栈可能意味着您可以无限递归地调用traverse\u all\u子日志,这可能是因为if语句只保护第一行,而不是for循环
window.traverse_all_sublogins = (flat, LOGIN) => {
var sublogins = [LOGIN];
if (!isEmpty(flat[LOGIN].children)) {
var children = flat[LOGIN].children
for (var i of children) {
sublogins = sublogins.concat(traverse_all_sublogins(flat, children[i]))
}
}
return sublogins;
}
我想这是咖啡脚本。这项工作:
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\u 1
和account\u 5
作为变量,它们在flat
中,所以为了测试的目的,我把它们改成了字符串。类似地,我不知道您从何处获取了isEmpty
,因此我使用了CoffeeScript的方法+我不关心子列表是否为空,因为迭代空的iterable工作时什么也不做
我建议使用比“login”和“flat”或“login”更好的名称。你是说用户名和别名吗?flat是一个完整的DB表,可以在JS中手动遍历吗?如果是这样,您可以用SQL编写此函数。另外,在编写多行代码时,请使用显式“return”,这样可读性更好。这确实意味着调用函数的次数太多。你的数据中有循环吗?谢谢@Ctrl-C if语句完成了这项工作,我的递归最终得到了修复,谢谢你的帮助关于你所说的,数据不是在后台形成的,它来自DB数据,内部的子对象可以是任何东西,从这个子对象使用递归,我创建了一个在who下面的树,等等