javascript - Javascript通过递归获取根元素

标签 javascript arrays json object recursion

我需要获取每个节点的根元素。
我有以下两个功能。
当我运行 getRoot 时,我得到 undefined
我认为问题出在递归函数上。

例如:对于节点 id=3,我需要 {id: 1, name: "Business1"}

//to get the parent for any node
function getParent(id) {
  const node = this._items.find(
    item => item.parent !== undefined && item.id == id
  );
  return node.parent;
}

//to get the root for the node
function getRoot(parent) {
  console.log(this._items);
  this._items.forEach(element => {
    if (element.id == parent) {
      if (element.parent === undefined) return element;
      else return this.getRoot(element.parent);
    }
  });
}
//constant array
const array = [
  {id: 1, name: "Business1"},
  {id: 2, name: "Canton1", parent: 1},
  {id: 3, name: "Branch1", parent: 2},
  {id: 4, name: "Branch2", parent: 2},
  {id: 5, name: "Canton2", parent: 1},
  {id: 6, name: "Branch1", parent: 5},
  {id: 7, name: "Branch2", parent: 5},
  {id: 8, name: "Canton3", parent: 1},
  {id: 9, name: "Branch1", parent: 8},
  {id: 10, name: "Branch2", parent: 8},
  {id: 9, name: "Business2"},
  {id: 10, name: "Canton1", parent: 9},
  {id: 11, name: "Branch1", parent: 10},
  {id: 12, name: "Branch2", parent: 10},
  {id: 13, name: "Canton2", parent: 9},
  {id: 14, name: "Branch1", parent: 13},
  {id: 15, name: "Branch2", parent: 13},
  {id: 16, name: "Canton3", parent: 9},
  {id: 17, name: "Branch1", parent: 16},
  {id: 18, name: "Branch2", parent: 16},
];

最佳答案

const items = [{ id: 1, name: "Business1" },
{ id: 2, name: "Canton1", parent: 1 },
{ id: 3, name: "Branch1", parent: 2 },
{ id: 4, name: "Branch2", parent: 2 },
{ id: 5, name: "Canton2", parent: 1 },
{ id: 6, name: "Branch1", parent: 5 },
{ id: 7, name: "Branch2", parent: 5 },
{ id: 8, name: "Canton3", parent: 1 },
{ id: 9, name: "Branch1", parent: 8 },
{ id: 10, name: "Branch2", parent: 8 },
{ id: 9, name: "Business2" },
{ id: 10, name: "Canton1", parent: 9 },
{ id: 11, name: "Branch1", parent: 10 },
{ id: 12, name: "Branch2", parent: 10 },
{ id: 13, name: "Canton2", parent: 9 },
{ id: 14, name: "Branch1", parent: 13 },
{ id: 15, name: "Branch2", parent: 13 },
{ id: 16, name: "Canton3", parent: 9 },
{ id: 17, name: "Branch1", parent: 16 },
{ id: 18, name: "Branch2", parent: 16 }]


const getParent = (id) => {
    const node = items.filter(e => e.id == id)
    if (node.length == 0) return undefined // throw some error here
    let currentNode = node[0]
    return currentNode.parent !== undefined ? getParent(currentNode.parent) : currentNode
}

console.log(getParent(3))

关于javascript - Javascript通过递归获取根元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63699550/

相关文章:

javascript - 使用 angularjs 解析 JSON

javascript - 将 2D PHP 数组转换为 2D Json 对象以在图形上绘制

java - 验证 Json 请求架构

javascript - 如何在 AngularJS 中使用过滤器从数组中删除项目?

javascript - Soundcloud SDK 3. 最喜欢的(喜欢的)歌曲的不间断流

arrays - 状态自己改变?

java - 循环并不能处理所有事情

javascript - 旧版 HTML - 带有文本值的文本链接表单提交

javascript - 替换 JS 中的 setInterval 计时器

javascript - 将对象数组转换为对象的最佳方法?