我有一棵这样的树
var datas = {
'tree': [
{
'name': 'name1',
'tree': [
{'name': 'name2'},
{'name': 'name3'},
{
'name': 'name4',
'tree': [
{'name': 'name5'},
{'name': 'name6'}
]
},
{'name': 'name7'}
]
},
{
'name': 'name8',
'tree': [
{'name': 'name9'}
]
}
]
}
我想找到特定id的所有 parent
例如在树演示中,如果我寻找“name5”,我想找到“name1,name4,name5”
我写了这段代码,但结果是错误的,我得到了其他元素的 id,而不仅仅是父元素
这是我的代码
keys: string[];
pathFound: boolean = false;
getLevel(event: iEventBase, id: string, path: string[]): void {
if (this.pathFound) return;
event.content.forEach((key) => {
if (key.id == id) {
if(!path){
path = [];;
}
path.push(key.id);
this.keys = path;
this.pathFound = true;
return;
}
if (key.type === "page") {
if(!path){
path = [];
}
path.push(key.id);
this.getLevel(key, id, path);
}
})
}
}
this.getLevel(state.mainEvent.content.page, event.id, null);
最佳答案
您可以使用递归方法检查名称并返回一个新的数据结构,其中仅包含所需对象的节点。
function find({ tree = [], ...object }, name) {
var result;
if (object.name === name) return object;
return tree.some(o => result = find(o, name)) && Object.assign({}, object, { tree: [result] });
}
var datas = { tree: [{ name: 'name1', tree: [{ name: 'name2' }, { name: 'name3' }, { name: 'name4', tree: [{ name: 'name5' }, { name: 'name6' }] }, { name: 'name7' }] }, { name: 'name8', tree: [{ name: 'name9' }] }] };
console.log(find(datas, 'name5'));
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于JavaScript:在树递归中查找元素的所有父项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53277219/