在Javascript中防止数组中的循环引用

我有一个像下面这样的数据结构。

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

如果我想在“c”(“a”,“e”没有string,但是节点的副本)中插入元素{id:"e", children:["a","f"] ,检查它是否存在于上层树中,因此会创build一个循环引用。 所以我觉得我必须反向走arrays。 但是因为我对JavaScript和Node很新,所以我不知道该怎么做。

这会是一个好主意,创build一个数组,我将所有的依赖存储在? 像这样的东西:

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

那么我可以查找数组中的父级,并会看到在c中,a和b已经依赖

如果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);