TypeScript Рекурсивная функция возвращает неопределенное - PullRequest
0 голосов
/ 03 июня 2018

У меня есть массив объектов со следующей структурой:

{
  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);                
        }
    });
}

Эта функция возвращает ноль, когдаЯ звоню

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

Я вижу, что он достигает return value; и, таким образом, нашел правильный узел, но возвращает неопределенное значение.

1 Ответ

0 голосов
/ 03 июня 2018

Ваш обратный вызов возвращает значение, но функция переноса ничего не возвращает.Попробуйте сохранить возвращаемое значение, когда оно будет найдено, и вернуть его:

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.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...