繁体   English   中英

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

[英]How to dynamically add reference to parent in a javascript multilevel object?

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

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

我被困在应该改变原始对象的位置。 我不知道该怎么做。

代码段以示例对象开头。 它后面是一个递归函数,该函数访问每个节点并保留对父节点的引用,但不修改该对象。 然后有一个功能可以修改对象,但只能修改3个深度。

 var obj = { id: "a", children: [{ id: "b", children: [{ id: "c" }] }, { id: "d" } ] }; function visitNode(node, parent) { if (node.children) { console.log('node with children', node, 'parent\\'s ID is:', parent.id); node.children.forEach(child => visitNode(child, node)); } else { console.log('node with no children:', node, 'parent\\'s ID is:', parent.id); } } visitNode(obj, {id: null}); function mutate(obj) { obj.parentId = null; if (obj.children) { obj.children.forEach((child, i) => { obj.children[i].parentId = obj.id; if (child.children) { child.children.forEach((child2, j) => { obj.children[i].children[j].parentId = obj.children[i].id; }) } }) } } mutate(obj); console.log('mutated object', obj); 

您可以使用与实际对象和父引用一起调用的递归函数。 如果存在子代,则对子代进行迭代,并使用实际引用再次调用该函数。

该建议创建对对象的循环引用(这意味着JSON.stringify可能不起作用)。

 function setParent(object, parent) { object.parent = parent; object.children && object.children.forEach(function (o) { setParent(o, object); }); } var object = { id: "a", children: [{ id: "b", children: [{ id: "c" }] }, { id: "d" }] }; setParent(object); console.log(object); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM