Javascript:使用for循环递归

时间:2017-04-13 09:48:04

标签: javascript recursion

我的当前递归有问题。当我记录this.memb和this.child时,这两个值是相同的。但是,情况应该不是这样。从理论上讲,孩子应该是this.memb的孩子。

buildGraphNode(treeNode){
    if(!(treeNode.data instanceof Array)){
      this.memb = this.member("" + treeNode.label, "" + treeNode.label, 'images/user1.png', '#d0000c', '', 'B');
      this.members.push(this.memb);
    }
    for (var i = 0; i<treeNode.children.length; i++) {
      this.child = this.buildGraphNode(treeNode.children[i]);

      if(this.child != null && this.memb !=null){
        console.log(this.memb);
        console.log(this.child);
        this.connections.push(this.link(this.memb,this.child));
      }
    }
    return this.memb;
}

1 个答案:

答案 0 :(得分:0)

你正在使用过多的引用“this”。您在此处操作相同的this对象,最终将修改外部上下文。请尝试使用局部变量:

buildGraphNode(treeNode){
    if(!(treeNode.data instanceof Array)){
      var memb = this.member("" + treeNode.label, "" + treeNode.label, 'images/user1.png', '#d0000c', '', 'B');
      this.members.push(memb);
    }
    for (var i = 0; i<treeNode.children.length; i++) {
      var child = this.buildGraphNode(treeNode.children[i]);

      if(child != null && memb !=null){
        console.log(memb);
        console.log(child);
        this.connections.push(link(memb,child));
      }
    }
    return memb;
}

我不知道您是如何构建代码的,因此可能需要更改this的其他实例。