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

标签 javascript arrays javascript-objects

在我正在使用的树对象中,一个节点可能有一个“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; }

关于javascript - 如何在 javascript 多级对象中动态添加对父对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45752116/

相关文章:

javascript - 从字符串转换为 HTML 标记

javascript - CKEditor插件设置类

javascript - 'var' 未在 npm 中定义为内部或外部命令

arrays - 如何找到列表中1的最长间隔[matlab]

javascript - 在没有 "new"关键字 kosher 的情况下声明 Javascript 对象的方法?

javascript - AngularJS Bootstrap 崩溃了

C 数组结构声明

java - 在 foreach 循环中改变 boolean 数组

Javascript对象编译算法

javascript - 根据搜索词的相关性对多个 JavaScript 数组进行合并和排序