js实现对象深拷贝

  首先深拷贝浅拷贝区别:
    深拷贝:深拷贝是将要拷贝的数据拷贝下来,对已拷贝的数据进行操作修改  源数据不会改变
    浅拷贝:浅拷贝是数据的直接赋值操作,对赋值变量进行操作修改  原始数据也会跟着改变
  
  实现思路:
    假设有原始数据 obj = {
      name:'张三',
      age:24,
      children:{
        son:{
          name:'张小三',
          age:3
        },
        daughter:{
          name:'张小小',
          age:1
        }
      },
      address:['北京','上海','深圳'] 
    }
    首先创建一个函数并传入一个参数(要拷贝的原始数据)
    根据传入参数创建控对象或者数组(输出需要)
    对传入参数进行判断,只有当参数是对象形式并且参数不为null进入循环,否则直接赋值
    在循环中调用函数本身并传入当前成员对创建的对象进行赋值
    
    代码:
      function copyDeep(data){
        let copyObj = data instanceof Array? []:{}
        if(typeof data === 'object' && data !== null){
          for(let key in data){
            copyObj[key] = copyDeep(data[key])
          }
        }else{
          copyObj = data
        }
        return copyObj
      }
      let copy_obj = copyDeep(obj)
      copy_obj.name = '李四'
      copy_obj.children.son.name = '李son'
      console.log(obj,copy_obj)
    
    可以试着打印一下直接赋值的情况,看看有什么不一样的地方O0O
posted @ 2021-10-29 14:20  VL小小白  阅读(289)  评论(0编辑  收藏  举报