Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays_Javascript Objects - Fatal编程技术网

如何在javascript多级对象中动态添加对父对象的引用?

如何在javascript多级对象中动态添加对父对象的引用?,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,在我正在使用的树对象中,节点可能具有“children”属性,该属性可以包含子节点数组。这是一个多级菜单结构的概念 我想要实现的是在子对象中动态添加对父对象的引用 我被困在了我应该改变原始对象的地方。我不知道该怎么做才好 代码段以一个示例对象开始。它后面是一个递归函数,它访问每个节点并保存对父节点的引用,但不修改对象。然后有一个函数修改对象,但深度仅为3级 var obj={ id:“a”, 儿童:[{ id:“b”, 儿童:[{ id:“c” }] }, { id:“d” } ] }; 函数

在我正在使用的树对象中,节点可能具有“children”属性,该属性可以包含子节点数组。这是一个多级菜单结构的概念

我想要实现的是在子对象中动态添加对父对象的引用

我被困在了我应该改变原始对象的地方。我不知道该怎么做才好

代码段以一个示例对象开始。它后面是一个递归函数,它访问每个节点并保存对父节点的引用,但不修改对象。然后有一个函数修改对象,但深度仅为3级

var obj={
id:“a”,
儿童:[{
id:“b”,
儿童:[{
id:“c”
}]
},
{
id:“d”
}
]
};
函数visitNode(节点、父节点){
if(节点子节点){
log('node with children',node,'parent's ID为:',parent.ID);
forEach(child=>visitNode(child,node));
}否则{
log('没有子节点的节点:',节点,'父节点的ID是:',父节点的ID是:';
}
}
visitNode(obj,{id:null});
功能变异(obj){
obj.parentId=null;
if(对象儿童){
obj.children.forEach((child,i)=>{
obj.children[i].parentId=obj.id;
if(child.children){
child.childs.forEach((child2,j)=>{
obj.children[i].children[j].parentId=obj.children[i].id;
})
}
})
}
}
突变(obj);

log('mutated object',obj)您可以使用递归函数,该函数通过实际对象和父引用调用。如果存在子函数,则迭代子函数,并使用实际引用再次调用该函数

此方案创建对对象的循环引用(这意味着可能不起作用)

函数setParent(对象,父对象){
object.parent=父对象;
object.children&&object.children.forEach(函数(o){
setParent(o,对象);
});
}
var对象={id:“a”,子对象:[{id:“b”,子对象:[{id:“c”}]},{id:“d”}]};
setParent(对象);
console.log(对象)

.as console wrapper{max height:100%!important;top:0;}
是否要添加对父级的反向引用?@NinaScholz:是的,这就是我要做的。