在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);