深拷贝

let arr = [1,2,3,4];


      function deepClone(obj) {

      //定义对象来判断当前的参数是数组还是对象

      let objClone = Array.isArray(obj) ? [] : {};

      //如果obj存在并且为对象    

      if(obj && typeof obj == "object") {

        for(let key in obj) {

          if(obj.hasOwnProperty(key)) {

            //如果obj的子元素为对象,那么递归(层级遍历)

            if(obj[key] && typeof obj[key] == "object") {

              objClone[key] = deepClone(obj[key]);

            } else {

              //如果不是,直接赋值

                objClone[key] = obj[key];

              }

            }

          }

        }

        return objClone;

      }


      let arr1 = deepClone(arr);

      console.log(arr1);//[ [1, 2, 3, 4]]

      arr1[2] = 5;

      console.log(arr1);//[1, 2, 5, 4]

      console.log(arr);//[1, 2, 3, 4]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对象的深拷贝实现原理: 定义一个新的对象,遍历源对象的属性 并 赋给新对象的属性 闭包:子函数能被外部调用到,则该...
    undefined汪少阅读 4,039评论 0 50
  • 在说深拷贝与浅拷贝前,我们先看两个简单的案例: //案例1var num1 = 1, num2 = num1;co...
    lueyoo阅读 3,717评论 0 1
  • 深拷贝和浅拷贝是针对复杂数据类型来说的,浅拷贝只拷贝一层,而深拷贝是层层拷贝。 代码中理解... <!DOCTYP...
    果粒橙没有粒阅读 4,385评论 0 1
  • 一般不会深拷贝函数等,所以一般用递归和JSON方法即可。 如果要实现函数等拷贝,比较完美的做法: function...
    Gen_阅读 4,355评论 0 0
  • 深拷贝VS浅拷贝 本文主要对深拷贝&浅拷贝的解释及实现做一下简单记录。 之所以会有深拷贝与浅拷贝之分,是因为不同数...
    崔小叨阅读 4,601评论 0 1