Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.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
Angular 父子数据结构类型中的递归搜索_Angular_Typescript_Recursion_Parent Child - Fatal编程技术网

Angular 父子数据结构类型中的递归搜索

Angular 父子数据结构类型中的递归搜索,angular,typescript,recursion,parent-child,Angular,Typescript,Recursion,Parent Child,我的数据结构如下: 每个子级可以有无限个子级列表 我想通过Id在此“树”中找到一个特定的子项,并通过链接返回它。 这就是我到目前为止所做的: getNodeById(nodes: child[], id: number) { for (var i = 0; i < nodes.length; i++) { if (id === nodes[i].id) { return nodes[i]; }

我的数据结构如下:

每个子级可以有无限个子级列表

我想通过Id在此“树”中找到一个特定的子项,并通过链接返回它。
这就是我到目前为止所做的:

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;
    }
getNodeById(节点:子[],id:number){
对于(var i=0;i
问题是不可能在第二个for循环中执行多次返回。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;
}
私有getNodeById(节点:子[],id:编号){ 对于(var i=0;i0){ 返回此.getNodeById(子项,id); } 返回null; }
什么是不合适的,因为它不通过链接返回值,所以
当我在函数外部更改返回的子项时,它不会影响树

假定只有一个唯一的匹配项(因为您不想在第一个循环中找到多个匹配项),您可以执行以下操作:

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

            if (match) {
                return match;
            }
        }
for(变量i=0;i
我不确定你所说的“链接”到底是什么意思。。。当您更改返回的子级时,您希望看到对树的哪些更改?你能展示一下吗?