根据json的from&to遍历出多少种组合

baidu_23144607 2014-11-10 02:42:25
根据from与to的连接,想遍历出当前json有多少种组合路径,
"lines": {
"demo_line_3": {
"from": "demo_node_1",
"to": "demo_node_2",
},
"demo_line_5": {
"from": "demo_node_2",
"to": "demo_node_4",
},
"demo_line_8": {
"from": "demo_node_4",
"to": "demo_node_6",
},
"demo_line_9": {
"from": "demo_node_4",
"to": "demo_node_7",
},
"demo_line_11": {
"from": "demo_node_6",
"to": "demo_node_10",
},
"demo_line_12": {
"from": "demo_node_7",
"to": "demo_node_10",
},
"demo_line_14": {
"from": "demo_node_10",
"to": "demo_node_13",
}
}

实际就是这种意思,原串:
demo_node_1->demo_node_2|demo_node_2->demo_node_4|demo_node_4->demo_node_6|demo_node_4->demo_node_7|demo_node_6->demo_node_10|demo_node_7->demo_node_10|demo_node_10->demo_node_13
遍历算出,这两种组合路径:
demo_node_1->demo_node_2->demo_node_4->demo_node_6->demo_node_10->demo_node_13
demo_node_1->demo_node_2->demo_node_4->demo_node_7->demo_node_10->demo_node_13

谢谢,麻烦各位指导一下。
...全文
218 2 打赏 收藏 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_23144607 2014-11-12
  • 打赏
  • 举报
回复
十分感谢!!!
  • 打赏
  • 举报
回复
如果你的分支节点按先后次序出现,而不是加插到其他位置,可以这样遍历,后面有///的是新增来测试的点
    var d = { "lines": {
        "demo_line_3": {
            "from": "demo_node_1",
            "to": "demo_node_2"
        },
        "demo_line_5": {
            "from": "demo_node_2",
            "to": "demo_node_4"
        },
        "demo_line_8": {
            "from": "demo_node_4",
            "to": "demo_node_6"
        },
        "demo_line_9": {
            "from": "demo_node_4",
            "to": "demo_node_7"
        },
        "demo_line_91": {
            "from": "demo_node_4",
            "to": "demo_node_71"///////
        },
        "demo_line_11": {
            "from": "demo_node_6",
            "to": "demo_node_10"
        },
        "demo_line_12": {
            "from": "demo_node_7",
            "to": "demo_node_10"
        },
        "demo_line_14": {
            "from": "demo_node_10",
            "to": "demo_node_13"
        },
        "demo_line_15": {
            "from": "demo_node_13",
            "to": "demo_node_15"////////
        }
    }
    };
    var paths = [],line,arr;
    for (attr in d.lines) {
        line = d.lines[attr];
        if (paths.length == 0) paths[0] = { path: line.from + '->' + line.to, to: line.to, from: line.from };
        else {
            for (var i = 0, l = paths.length; i < l; i++) {
                if (paths[i].to == line.from) { paths[i].path += '->' + line.to; paths[i].to = line.to; paths[i].from = line.from; }
                else if (paths[i].from == line.from) {//分裂线路
                    arr = paths[i].path.split('->');
                    arr[arr.length - 1] = line.to;
                    paths[paths.length] = { path: arr.join('->'), from: line.from, to: line.to };
                    break;
                }
            }
        }
    }

    for (var i = 0; i < paths.length; i++)
        document.write(paths[i].path + '<br>');

87,984

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧