Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在typescript中查找树中的树_Javascript_Arrays_Typescript_Recursion_Ecmascript 6 - Fatal编程技术网

Javascript 如何在typescript中查找树中的树

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

假设我有一个javascript树

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))