Javascript 如何在typescript中查找树中的树
假设我有一个javascript树Javascript 如何在typescript中查找树中的树,javascript,arrays,typescript,recursion,ecmascript-6,Javascript,Arrays,Typescript,Recursion,Ecmascript 6,假设我有一个javascript树 a1 --b ----c1 a2 --b2 --b3 ----c2 如果我想找到c2,它应该返回a2->b3->c2 假设我的json看起来像这样 treeFamily = { name : "Parent", children: [{ name : "Child1", children: [{ name
a1
--b
----c1
a2
--b2
--b3
----c2
如果我想找到c2,它应该返回a2->b3->c2
假设我的json看起来像这样
treeFamily = {
name : "Parent",
children: [{
name : "Child1",
children: [{
name : "Grandchild1",
children: []
},{
name : "Grandchild2",
children: []
},{
name : "Grandchild3",
children: []
}]
}, {
name: "Child2",
children: []
}]
};
您可以检查嵌套的子项是否具有所需的键/值。然后获取
名称
,并将结果交给外部调用
函数findPath(数组,目标){
var路径;
array.some({name,children})=>{
无功温度;
如果(名称===目标){
路径=[name];
返回true;
}
if(temp=findPath(子级,目标)){
路径=[name,…temp];
返回true;
}
});
返回路径;
}
var treeFamily={name:“Parent”,children:[{name:“children 1”,children:[]},{name:“孙子2”,children:[]},{name:“孙子3”,children:[]},{name:“children 2”,children:[]};
log(findPath([treeFamily],'grande2');
log(findPath([treeFamily],'foo')代码>您可以检查嵌套子项是否具有所需的键/值。然后获取名称
,并将结果交给外部调用
函数findPath(数组,目标){
var路径;
array.some({name,children})=>{
无功温度;
如果(名称===目标){
路径=[name];
返回true;
}
if(temp=findPath(子级,目标)){
路径=[name,…temp];
返回true;
}
});
返回路径;
}
var treeFamily={name:“Parent”,children:[{name:“children 1”,children:[]},{name:“孙子2”,children:[]},{name:“孙子3”,children:[]},{name:“children 2”,children:[]};
log(findPath([treeFamily],'grande2');
log(findPath([treeFamily],'foo')代码>您可以使用递归调用函数来搜索子级。如果找到目标,则返回名称,并与以前的名称组合。否则,函数将返回未定义的
。或者,您可以返回一个空数组
const findPath=(targetName,{name,children})=>{
如果(name==targetName)返回[name];
for(const child of children){
const result=findPath(targetName,child);
如果(结果)返回[名称,…结果];
}
//如果未找到子级,则隐式返回undefined或返回[]以获取空数组
};
const treeFamily={name:“Parent”,children:[{name:“children 1”,children:[]},{name:“孙子2”,children:[]},{name:“孙子3”,children:[]},{name:“children 2”,children:[]};
log(findPath('Child2',treeFamily));
log(findPath('sunder3',treeFamily));
log(findPath('sunder400',treeFamily))代码>您可以使用递归调用函数来搜索子级。如果找到目标,则返回名称,并与以前的名称组合。否则,函数将返回未定义的
。或者,您可以返回一个空数组
const findPath=(targetName,{name,children})=>{
如果(name==targetName)返回[name];
for(const child of children){
const result=findPath(targetName,child);
如果(结果)返回[名称,…结果];
}
//如果未找到子级,则隐式返回undefined或返回[]以获取空数组
};
const treeFamily={name:“Parent”,children:[{name:“children 1”,children:[]},{name:“孙子2”,children:[]},{name:“孙子3”,children:[]},{name:“children 2”,children:[]};
log(findPath('Child2',treeFamily));
log(findPath('sunder3',treeFamily));
log(findPath('sunder400',treeFamily))代码>