TypeScript 递归函数返回未定义

Mar*_*eyn 3 tree recursion typescript

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

{
  Name: "Automotive"
  RefCategory: 1,
  ChildCategories:[{
     Name: "Car"
     RefCategory: 2,
     ChildCategories: []
  },{
     Name: "Motorcycle"
     RefCategory: 3,
     ChildCategories: []
  }]
}
Run Code Online (Sandbox Code Playgroud)

我编写了一个函数来查找给定 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);                
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

当我调用这个函数时返回 null

let x = this.navigateToNode(this.activeCategories[0], 2);
Run Code Online (Sandbox Code Playgroud)

我可以看到它击中了return value;,从而找到了正确的节点,但返回未定义。

Laj*_*pad 5

您的回调正在返回一个值,但包装函数不会返回任何内容。尝试在找到时保存返回值并返回:

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;
}
Run Code Online (Sandbox Code Playgroud)