我有如下的数据结构。
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已经完全依赖
答案 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);