我正在尝试使用一系列父级与子级关系,直到我们找到没有自己父级的父级。如果孩子有父母,那么我们将该父对象与该父母的任何父母一起存储。如果父级没有父级,我们存储一个空数组。
这是一些伪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中的对象时,它们包含无穷大的子对象对。
答案 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