TypeScript递归函数返回未定义的

TypeScript递归函数返回未定义的,typescript,recursion,tree,Typescript,Recursion,Tree,我有一个具有以下结构的对象数组: { Name: "Automotive" RefCategory: 1, ChildCategories:[{ Name: "Car" RefCategory: 2, ChildCategories: [] },{ Name: "Motorcycle" RefCategory: 3, ChildCategories: [] }] } 我编写了一个函数来查找给定Ref的类别节点: n

我有一个具有以下结构的对象数组:

{
  Name: "Automotive"
  RefCategory: 1,
  ChildCategories:[{
     Name: "Car"
     RefCategory: 2,
     ChildCategories: []
  },{
     Name: "Motorcycle"
     RefCategory: 3,
     ChildCategories: []
  }]
}
我编写了一个函数来查找给定Ref的类别节点:

navigateToNode(node: any, RefCategoryToFind: number): any {

    if (node.RefCategory == RefCategoryToFind)
        return node;

    node.ChildCategories.forEach(value => {
        if (value.RefCategory == RefCategoryToFind)
            return value;
        else {
            if (value.ChildCategories.length !== 0)
                return this.navigateToNode(value, RefCategoryToFind);                
        }
    });
}
当我调用时,此函数返回null

let x = this.navigateToNode(this.activeCategories[0], 2);

我可以看到它点击
返回值,因此找到了正确的节点,但返回未定义的。

您的回调返回一个值,但包装函数不返回任何内容。找到返回值后,请尝试保存该值并将其返回:

navigateToNode(node: any, RefCategoryToFind: number): any {

    if (node.RefCategory == RefCategoryToFind)
        return node;

    var result;

    node.ChildCategories.forEach(value => {
        if (value.RefCategory == RefCategoryToFind) {
            result = value;
            return value;
        } else {
            if (value.ChildCategories.length !== 0)
                return this.navigateToNode(value, RefCategoryToFind);                
        }
    });
    return result;
}

forEach
的回调返回了一些东西,但这并不意味着
navigateNode
返回了一些东西。但是当它点击返回按钮时是否应该退出?如何使其适应工作?回调退出。外部功能是独立的。为什么不使用常规的for循环呢?喂。我刚刚遇到了类似的情况。我的函数工作时
function parentUnit(element){var unit=element.parentElement;if(unit!=null){if(!unit.classList.contains(“unit”){unit=parentUnit(unit);}}}返回unit;}
但是我很好奇,如果if语句已经存在,包装函数为什么要返回一些东西呢(我有
返回单位;
if(unit.classList.contains)(“单位”)
中,它返回了未定义的单位。@iJassar您的情况不同。请注意,有一个
值=>{…}
在上面的代码中,这是一个箭头函数。问题中的return语句出现在这个内部箭头函数中,但包装器函数没有返回。在您的情况下,有一个Javascript函数,它接受一个名为element的输入参数,将其parentElement放入单元中,如果单元没有返回,则创建一个unit类,然后通过对parentUnit的递归调用重写unit。在函数末尾,返回unit。@iJassar现在,您的函数正在简单地执行以下操作:当元素没有unit类时,在层次结构中向上移动。现在,如果传递给此函数的元素没有该类,也没有任何ancestors在层次结构中,则此函数将在层次结构中上升到父级、祖父母级等,直到没有更多已定义的父级。然后,此未定义的值返回给调用者,然后返回给调用者的调用者,等等,直到它到达初始调用,该调用也将返回未定义的。@iJassar因此,您案例中的错误是虽然您的代码假定传递给函数或其任何祖先的元素具有unit类,因此您需要研究所涉及的HTML结构。谢谢您,Lajos!问题是我共享的代码实际上是有效的。但是如果在if语句中有
return unit;
,则它没有,这没有意义因为IF语句不是函数内部的函数,所以这种行为的原因是什么?