JavaScript推送到数组后停止循环执行

时间:2017-06-29 14:06:08

标签: javascript typescript

我的简单脚本有问题。我有一个名为'FeatureFlag'的模型,它是一个参考父和子的树结构。我还有一个名为TreeBuilder的对象,它从FeatureFlag元素列表中生成一个树。

这是我的模特:

export class FeatureFlag {
    private _id: number;
    private _parent: FeatureFlag;
    private _children: FeatureFlag[] = [];

    set id(id:number) {
        this._id = id
    }

    set parent(parent:FeatureFlag) {
        this._parent = parent
    }

    get parent() : FeatureFlag {
        return this._parent
    } 

    set children(children:FeatureFlag[]) {
        this._children = children
    }

    get children() : FeatureFlag[] {
        return this._children
    }                       
}

和TreeBuilder中有问题的方法build():

public build() {
    for(let element of this.data) { //this.data is an array of dict [{node,parent}]
        let found = this.findNode(element.parent) //searches in tree for node with id 'element.parent'

        if(found) { //if parent node has been found          
             //found.children.push(element.node) //add current node to its children
             console.log(found) //print found
         }           
    }
}

当行:

found.children.push(element.node)
注释

,控制台打印所有找到的父母。没关系。但是当取消注释行时,console.log只打印一次 - 第一次找到父级。为什么会这样?

此致

1 个答案:

答案 0 :(得分:0)

奇怪!我会在推送之前放置一个调试器语句,然后逐步执行它以确保它不会抛出一个静默捕获的错误。还要确保children.push没有任何意外的副作用。

我怀疑children.push是以某种方式投掷,也许是因为没有定义孩子,但是Angular吞下了这个错误。此外,findNode肯定会返回一个FeatureFlag而不是其他东西吗?