使用广度优先遍历,写一个功能完备的js深拷贝函数,防止循环引用
function deepCopy(obj) { const map = new Map(); // 用于存储已经拷贝过的对象 const queue = [obj]; // 用于存储待拷贝的对象 const copy = {}; // 用于存储拷贝后的对象
while (queue.length) { const item = queue.shift(); if (map.has(item)) { continue; // 如果已经拷贝过,则跳过 } map.set(item, true); // 标记为已拷贝
if (typeof item === "object") {
  if (Array.isArray(item)) {
    const newArr = [];
    copy[item] = newArr;
    for (let i = 0; i < item.length; i++) {
      newArr[i] = item[i];
      queue.push(item[i]); // 将待拷贝的对象加入队列
    }
  } else {
    const newObj = {};
    copy[item] = newObj;
    for (let key in item) {
      newObj[key] = item[key];
      queue.push(item[key]); // 将待拷贝的对象加入队列
    }
  }
} else {
  copy[item] = item;
}
} return copy; }
原文地址: https://www.cveoy.top/t/topic/zE4 著作权归作者所有。请勿转载和采集!