parent-child 数据结构类型中的递归搜索

Recursive search in parent-child data structure type

我有这样的数据结构:

每个 child 可以有无限列表 children

我想通过 Id 在这个 'tree' 中找到一个特定的 child 并通过 link 找到一个特定的 return。
这是我目前所拥有的:

getNodeById(nodes: child[], id: number) {
        for (var i = 0; i < nodes.length; i++) {
            if (id === nodes[i].id) {
                return nodes[i];
            }
        }

        for (var i = 0; i < nodes.length; i++) {
            return this.getNodeById(nodes[i].children, id);
        }

        return null;
    }

问题是不可能在第二个 for 循环中执行多个 return。 return 语句仅在 i 为 0 时发生。
我也试过:

private getNodeById(nodes: child[], id: number) {
    for (var i = 0; i < nodes.length; i++) {
        if (id === nodes[i].id) {
            return nodes[i];
        }
    }

    for (var i = 0; i < nodes.length; i++) {
        var children: child[] = [];
        children = children.concat(nodes[i].children)
    }

    if (children.length > 0) {
        return this.getNodeById(children, id);
    }

    return null;
}

什么是不合适的,因为它没有 return 价值 link,所以 当我在函数外更改 returned child 时,它不会影响树

假设应该只有一个唯一匹配项(因为您不想在第一个循环中找到多个匹配项),您可以这样做:

        for (var i = 0; i < nodes.length; i++) {
            var match = this.getNodeById(nodes[i].children, id);

            if (match) {
                return match;
            }
        }