我需要获取每个节点的根元素。
我有以下两个功能。
当我运行 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/