Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript访问图形中的每个节点_Javascript_Graph - Fatal编程技术网

JavaScript访问图形中的每个节点

JavaScript访问图形中的每个节点,javascript,graph,Javascript,Graph,我想创建一个图,其中每个节点都连接到其子节点 function Node (value) { this.value = value; this.childs = []; this.mark = false; } 这是我的图表 var nodes = [new Node (0), new Node (1), new Node (2), new Node (3), new Node (4)]; nodes[0].childs.push (nodes[1]); nodes[

我想创建一个图,其中每个节点都连接到其子节点

function Node (value) {
    this.value = value;
    this.childs = [];
    this.mark = false;
}
这是我的图表

var nodes = [new Node (0), new Node (1), new Node (2), new Node (3), new Node (4)];

nodes[0].childs.push (nodes[1]);
nodes[1].childs.push (nodes[0]);

nodes[1].childs.push (nodes[2]);
nodes[2].childs.push (nodes[1]);

nodes[1].childs.push (nodes[4]);
nodes[4].childs.push (nodes[1]);

nodes[2].childs.push (nodes[3]);
nodes[3].childs.push (nodes[2]);
应该是这样的

现在我想访问每个节点

function visit (node) {
    node.mark = true;
    for (i=0; i<node.childs.length; i++)
        if (!node.childs[i].mark)
            visit (node.childs[i]);
}
功能访问(节点){
node.mark=true;

对于(i=0;i您的
i
具有全局范围

因此子数组上的迭代使用相同的
i
,并且相互干扰

通过添加
var
使其成为局部变量

for (var i=0; i<node.childs.length; i++)
    if (!node.childs[i].mark)
        visit (node.childs[i]);

我认为将数据结构化为一个对象而不是一个带有子数组的数组可以简化事情

如果您按照以下方式构建数据:

var nodes = {
    "0": {
        mark: false,
        "1": {
            mark: false,
            "2": {
                "3": {
                    mark: false
                }
            },
            "4": {
                mark: false
            }
        }
    }
}
(function visit(obj) {
    obj.mark = true;
    for (var key in obj) {
        if (typeof obj[key] === 'object') {
            visit(obj[key]);
        }
    }
})(nodes);
然后,您可以更轻松地访问每个节点,如下所示:

var nodes = {
    "0": {
        mark: false,
        "1": {
            mark: false,
            "2": {
                "3": {
                    mark: false
                }
            },
            "4": {
                mark: false
            }
        }
    }
}
(function visit(obj) {
    obj.mark = true;
    for (var key in obj) {
        if (typeof obj[key] === 'object') {
            visit(obj[key]);
        }
    }
})(nodes);
例如


因此,我认为,您真正需要解决的是构造函数的工作方式。祝您好运:)

此结构不提供图形,只提供树