js深拷贝数组与对象

在js中若是直接用=进行数组的拷贝,那么这样就只是浅拷贝,两个变量实际指向的是同一个地址,数组

这不是咱们想要的结果。this

所以咱们须要对数组进行深拷贝(对象亦如是)。spa

通常的数组(不包括对象元素的数组),咱们能够直接使用concat或slice进行深拷贝,亦或者直接写一个for循环进行逐一复制。code

如:对象

从以上结果能够看出concat和slice(0)的确能够进行深拷贝。可是若是数组中包含有对象,而咱们又要往数组中插入对象时,这两种方法就不行了。blog

从上面结果可知,咱们进行的只是一次浅拷贝。若是咱们要进行深拷贝,那么就须要对整个数组以及数组中的对象进行遍历,注意复制才行。io

var deepCopy=function(arr) {
    if (arr instanceof Array) {
      var n = [];
      for (var i = 0; i < arr.length; ++i) {
          n[i] = this.deepCopy(arr[i]);
      }
      return n;

    } else if (arr instanceof Object) {
      let n = {};
      for (var i in arr) {
          n[i] = this.deepCopy(arr[i]);
      }
      return n;
    } else {
      return arr;
    }
  }
相关文章
相关标签/搜索