前端深拷贝函数

// 使用map生成考虑了所有情况的深拷贝函数
function deepClone(obj, map = new WeakMap()) {
  // 基本类型直接返回
  if (typeof obj !== "object" || obj === null) {
    return obj;
  }

  // 如果map中有obj,直接返回,防止循环引用
  if (map.get(obj)) {
    return map.get(obj);
  }

  // 判断obj是数组还是对象,生成对应的cloneObj
  let cloneObj = Array.isArray(obj) ? [] : {};

  // 以obj为key,cloneObj为value存入map中,防止循环引用
  map.set(obj, cloneObj);

  // 遍历obj,递归调用deepClone
  for (let key in obj) {
    // 保证key不是原型的属性
    if (obj.hasOwnProperty(key)) {
      // 递归调用
      cloneObj[key] = deepClone(obj[key], map);
    }
  }
  // 返回拷贝后的对象
  return cloneObj;
}
posted @ 2023-03-27 17:09  脆皮鸡  阅读(30)  评论(0)    收藏  举报