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);

使用广度优先遍历,写一个功能准确的js深拷贝函数,注意时间复杂度不要太高

原文地址: https://www.cveoy.top/t/topic/zLN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录