【问题标题】:Recursive loop in JavascriptJavascript中的递归循环
【发布时间】:2014-08-23 02:44:50
【问题描述】:

我尝试使用递归循环将某些属性写入 html,但无法使代码工作:(

正如您在 Json 中看到的那样,我有一组哈希值。具有以下属性:serno - 序列号,parent_serno - 父序列号,name - 属性名称。我想首先写下每个具有“parent_serno == 0”的hash.name,然后在每个之后我想写下具有“parent_serno = serno(of first hash)”的散列名称,这是根据serno 和 parent_serno。

你们能告诉我我做错了什么吗?

 var dataBase = [{"serno": 1, "parent_serno": 0, "name": "Home"},
            {"serno": 2, "parent_serno": 0, "name": "Search"},
                {"serno": 10, "parent_serno": 2, "name": "Search Payment"},
            {"serno": 11, "parent_serno": 2, "name": "Problematic Search Payment"},
            {"serno": 12, "parent_serno": 2, "name": "Cash Error"},
            {"serno": 13, "parent_serno": 2, "name": "Payment Note"},
            {"serno": 89, "parent_serno": 2, "name": "Search Payment By Category"},
            {"serno": 131, "parent_serno": 2, "name": "Search Payment New"},
            {"serno": 3, "parent_serno": 0, "name": "User Mangement"},
            {"serno": 4, "parent_serno": 0, "name": "Service Provider"},
            {"serno": 5, "parent_serno": 0, "name": "General"},
            {"serno": 88, "parent_serno": 5, "name": "Balance and Financial"},
            {"serno": 14, "parent_serno": 5, "name": "My Subagents"},
            {"serno": 15, "parent_serno": 5, "name": "My Providers"},
            {"serno": 16, "parent_serno": 5, "name": "My Dealers"},
            {"serno": 17, "parent_serno": 5, "name": "My Wallets"},
            {"serno": 19, "parent_serno": 5, "name": "Accounts"},
            {"serno": 45, "parent_serno": 19, "name": "Bank Accounts"},
            {"serno": 46, "parent_serno": 19, "name": "Transfers"},
            {"serno": 0, "parent_serno": 5, "name": "My Statements"},
            {"serno": 47, "parent_serno": 20, "name": "My Terminals"}];

        var funkcia = function(parent) {
            for (var i=0, i < dataBase.length, i++){
                if (dataBase[i].parent_serno == parent){
                    document.write(dataBase[i].name);
                    parent = dataBase[i].serno;
                    funkcia(parent);
                };
                  };
                    };

funkcia(0);

【问题讨论】:

  • 关闭块时不要在括号}后使用分号;...

标签: javascript arrays json for-loop recursion


【解决方案1】:
 parent = dataBase[i].serno;
 funkcia(parent);

这是你的问题。您正在更改 parent 变量,然后让 for 循环继续运行,现在搜索错误的 parent

要么使用不同的变量:

function funkcia(parent) {
    for (var i=0; i < dataBase.length; i++){
        if (dataBase[i].parent_serno == parent){
            document.write(dataBase[i].name);
            var new_parent = dataBase[i].serno;
            funkcia(new_parent);
        }
    }
}

或根本没有:

function funkcia(parent) {
    for (var i=0; i < dataBase.length; i++){
        if (dataBase[i].parent_serno == parent){
            document.write(dataBase[i].name);
            funkcia(dataBase[i].serno);
        }
    }
}

【讨论】:

  • 感谢您的评论,但放置 break 似乎并不能解决问题:(
  • 对,当然不是。现在修好了。但请注意,这仍然无法按预期工作,因为您的 dataBaseMy StatementsGeneral 之间确实存在循环关系。
  • 是的,我想我打错了。我的陈述应该有 serno = 0;
  • 你可能想用更正的数据库更新你的问题。
  • 首页 |搜索 |搜索付款 |有问题的搜索付款 |现金错误 |付款说明 |按类别搜索付款 |搜索付款新 |用户管理 |服务提供商 |一般 |我的钱包 |账户 |银行账户 |转会 |我的声明 |主页 |搜索 |搜索付款 |有问题的搜索付款 |现金错误 |付款说明 |按类别搜索付款 |搜索付款新 |用户管理 |服务提供商 |一般 |我的钱包 |账户 |银行账户 |转会 |我的陈述。我得到这个输出......它仍然是错误的,但它更接近:) 谢谢你的回答 bergi。
猜你喜欢
  • 2013-09-30
  • 1970-01-01
  • 2021-05-09
  • 2015-07-14
  • 2017-07-18
  • 2018-11-11
  • 2017-03-03
  • 2011-04-18
  • 1970-01-01
相关资源
最近更新 更多