我需要一个在 JavaScript 中对对象进行深层复制的函数。每个对象都是更大图的一部分(因此需要深度复制功能)。例如,
//Node "class" with references to its parent and children
var MyNode = (function () {
function MyNode() {
this.children = undefined;
this.parent = undefined;
}
return MyNode;
})();
该图没有循环。
我的想法是对图形进行深度优先搜索,并使用一个字典来存储每个节点的哈希及其副本。在访问每个节点时,从字典中查找副本父节点,并将节点添加到其父子节点集合中。我的问题是,要使这种方法起作用,我需要能够拥有每个节点的内存位置。
这是我的总体想法:
function(rootNode) {
var magicDictionary = {};
var stack = {rootNode};
while(stack.length > 0) {
var current = stack.pop();
//Performs a shallow copy, not including the parent or children references
var newNode = new MyNode(current);
//Get our new node's parent based on our old node's parent
newNode.parent = magicDictionary[current.parent];
//Add this new node as a child
newNode.parent.children.push(newNode);
//Continue the DPS
for(var i = 0; i < current.children.length; i++)
stack.push(current.children[i]);
}
}
字典是这里的大问题。它实际上需要在内存位置上进行散列,因为即使是散列码函数也不可能对每个对象都是唯一的。
有一个更好的方法吗?