在Javascript中阻止Array中的循环引用

时间:2017-06-15 14:50:23

标签: javascript arrays node.js data-structures circular-reference

我有如下的数据结构。

array=[
    {id:"a",children:[
        {id:"b",children:[
            {id:"d",children:[]}]},
            {id:"c",children:[]}]}
]

如果我想在" c"处插入元素{id:"e", children:["a","f"] (" a"," e"没有字符串,但节点的副本)我想检查,它存在于上层树中,因此会创建一个循环引用。所以我想我必须反向走阵。但由于我对Javascript和Node不熟悉,我不知道该怎么做。

创建一个数组,存储所有依赖项是不是很好的想法?像这样的东西:

[
a:[],
b:[a],
c:[a,b]
d:[a,b]
]

然后我可以在数组中查找父级,并且会看到在c中,a和b已经完全依赖

1 个答案:

答案 0 :(得分:1)

如果id是唯一的,您可以使用哈希表。



var array = [{ id: "a", children: [{ id:"b", children: [{ id: "d", children: [] }] }, { id: "c", children: [] }]  }],
    hash = Object.create(null);

// creating circular reference
array[0].children[1].children.push(array[0]);

array.forEach(function iter(a) {
    if (hash[a.id]) {
        console.log(a.id, 'circular reference found');
        return;
    }
    hash[a.id] = true;
    a.children.forEach(iter);
});
console.log(array);