解决方案 »

  1.   

    如果你的分支节点按先后次序出现,而不是加插到其他位置,可以这样遍历,后面有///的是新增来测试的点    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>');