zoukankan      html  css  js  c++  java
  • 递归 深拷贝

    // 递归深拷贝!
        function clone(Obj) {
            var newObj;   
            if (Obj instanceof Array) {
                newObj = [];  // 创建一个空的数组
                var i = Obj.length;
                while (i--) {
                    newObj[i] = clone(Obj[i]);
                }
                return newObj;
            } else if (Obj instanceof Object){
                newObj = {};  // 创建一个空对象
                for (var k in Obj) {  // 为这个对象添加新的属性
                    newObj[k] = clone(Obj[k]);
                }
                return newObj;
            }else{
                return Obj;
            }
        }

    当你想复制一个对象或者一个数组时,如何做到互不影响,而且可以做到深拷贝呢,我们先来说说深拷贝和浅拷贝吧

    首先深拷贝和浅拷贝只针对像 Object, Array 这样的复杂对象的。简单来说,浅拷贝只复制一层对象的属性,而深复制则递归复制了所有层级。

    var obj = { a:1, arr: [9,10] };
    var reObj = Copy(obj);
    
    function Copy(src) {
      var dst = {};
      for (var prop in src) {
        if (src.hasOwnProperty(prop)) {
          dst[prop] = src[prop];
        }
      }
      return dst;
    }

    上面是一个简单的浅复制实现,因为浅复制只会将对象的各个属性进行依次复制,并不会进行递归复制,而 JavaScript 存储对象都是存地址的,所以浅复制会导致 obj.arr 和 reObj.arr 指向同一块内存地址。

    再来看看刚开篇时的代码,首先确定类型,然后确定递归的回调,最终到达对象或者数组的末端,达到深拷贝的要求。

  • 相关阅读:
    ‘Host’ is not allowed to connect to this mysql server
    centos7安装mysql
    further configuration avilable 不见了
    Dynamic Web Module 3.0 requires Java 1.6 or newer
    hadoop启动 datanode的live node为0
    ssh远程访问失败 Centos7
    Linux 下的各种环境安装
    Centos7 安装 python2.7
    安装scala
    Centos7 安装 jdk 1.8
  • 原文地址:https://www.cnblogs.com/hzhj/p/6476728.html
Copyright © 2011-2022 走看看