使用广度优先遍历,写一个功能准确的js深拷贝函数,注意时间复杂度不要太高
function deepCopy(obj) { let queue = [obj]; let res = {}; let visited = new WeakMap(); visited.set(obj, res);
while (queue.length) { let node = queue.shift(); let clonedNode = visited.get(node);
for (let key in node) {
if (node.hasOwnProperty(key)) {
let value = node[key];
if (typeof value !== "object" || value === null) {
clonedNode[key] = value;
} else {
if (!visited.has(value)) {
visited.set(value, {});
queue.push(value);
}
clonedNode[key] = visited.get(value);
}
}
}
} return res; }
//测试 let a = { name: "Tom", age: 18, address: { city: "Shanghai", street: "No.123", }, }; let b = deepCopy(a); console.log(b); console.log(a === b); console.log(a.address === b.address);
原文地址: https://www.cveoy.top/t/topic/zLN 著作权归作者所有。请勿转载和采集!