深拷贝

76 阅读1分钟
   // 浅拷贝只是拷贝一层,更深层次的对象级别的只拷贝引用
  // v
  var obj = {
    id: 1,
    name: "章三",
    msg: {
      age: 18,
    },
    arr: [{ name: "78" }],
    arr1: ["学习", "游戏"],
  }
  const o = {}
  function deepClone(newObj, oldObj) {
    Object.keys(oldObj).forEach((k) => {
      if (oldObj[k] instanceof Array) {
        newObj[k] = []
        deepClone(newObj[k], oldObj[k])
      } else if (typeof oldObj[k] == "object") {
        newObj[k] = {}
        deepClone(newObj[k], oldObj[k])
      } else {
        newObj[k] = oldObj[k]
      }
    })
  }
  deepClone(o, obj)
  console.log(o)
  // for (const k in obj) {
  //   o[k] = obj[k];
  // }
  // function clone(obj) {
  //   let o ={}
  //   for (var k in obj) {
  //     if (typeof obj[k]=="object"||typeof obj[k]=="array") {
  //       o[k]=clone(obj[k])
  //     }else{
  //       o[k] = obj[k]
  //     }
  //   }
  //   return o;
  // }
  // let p = clone(obj)
  // p.msg.age=20
  // console.log(obj);
  // console.log(p);