递归Javascript:child->父关系

时间:2014-01-22 03:26:30

标签: javascript recursion

我正在尝试使用一系列父级与子级关系,直到我们找到没有自己父级的父级。如果孩子有父母,那么我们将该父对象与该父母的任何父母一起存储。如果父级没有父级,我们存储一个空数组。

这是一些伪JSON,显示了我想要的数据结构。

Node3 = { // Node 3
   parent: { // Node 2
      parent: { // Node 1
         parent: null,
         parentTree: []
      },
      parentTree: [Node1]
   },
   parentTree: [Node2, Node1]
}

这是构造函数和目前为止的递归方法......

function Node(parent) {
    this.parent = typeof parent !== 'undefined' ? parent : null;
}

Node.prototype.getParentTree = function() {
    if(typeof this.parentTree === "undefined") {
        if (this.parent !== null) {
            this.parentTree = this.parent.getParentTree();
            this.parentTree.push(this.parent);
        } else {
            this.parentTree = [];
        }
    }
    return this.parentTree;
}

以下是我测试方法的方法:

var node1 = new Node();
var node2 = new Node(node1);
var node3 = new Node(node2);

node3.getParentTree();

当前方法的问题是node1,node2和node3的parentTree都有长度=== 2.当你检查parentTree中的对象时,它们包含无穷大的子对象对。

1 个答案:

答案 0 :(得分:2)

this.parentTree = this.parent.getParentTree();
this.parentTree.push(this.parent);

这样,父节点和子节点parentTree都引用了相同的Array对象 - 所以你也将新节点附加到父节点树上。

使用slice

创建数组的副本
return this.parentTree.slice(); // every time the getter is called

this.parentTree = this.parent.getParentTree().slice(); // only for manipulating