如何解决Java脚本通过递归获取根元素
我需要获取每个节点的根元素。
我下面有两个功能。
当我运行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",{id: 5,name: "Canton2",{id: 6,parent: 5},{id: 7,{id: 8,name: "Canton3",{id: 9,parent: 8},{id: 10,name: "Business2"},parent: 9},{id: 11,parent: 10},{id: 12,{id: 13,{id: 14,parent: 13},{id: 15,{id: 16,{id: 17,parent: 16},{id: 18,];
解决方法
const items = [{ id: 1,name: "Business1" },{ id: 2,name: "Canton1",parent: 1 },{ id: 3,name: "Branch1",parent: 2 },{ id: 4,name: "Branch2",{ id: 5,name: "Canton2",{ id: 6,parent: 5 },{ id: 7,{ id: 8,name: "Canton3",{ id: 9,parent: 8 },{ id: 10,name: "Business2" },parent: 9 },{ id: 11,parent: 10 },{ id: 12,{ id: 13,{ id: 14,parent: 13 },{ id: 15,{ id: 16,{ id: 17,parent: 16 },{ id: 18,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))
,
let _items = [
{id: 1,name: "Business1"},{id: 2,parent: 1},{id: 3,parent: 2},{id: 4,{id: 5,{id: 6,parent: 5},{id: 7,{id: 8,{id: 9,parent: 8},{id: 10,{id: 11,name: "Business2"},{id: 12,parent: 11},{id: 13,parent: 12},{id: 14,{id: 15,{id: 16,parent: 15},{id: 17,{id: 18,{id: 19,parent: 18},{id: 20,parent: 18}
];
function findElementById(id) {
let element_return = false;
_items.forEach(element => {
if (id === element.id) {
element_return = element;
return true;
}
});
return element_return;
}
function getRoot(parent) {
element = findElementById(parent);
if (element) {
if (typeof (element.parent) !== "undefined") {
return getRoot(element.parent);
} else {
return element.id;
}
} else {
return parent;
}
}
let test_root = getRoot(3);
console.log(test_root);
console.log(findElementById(test_root));
test_root = getRoot(11);
console.log(test_root);
console.log(findElementById(test_root));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。