js深拷贝数组与对象

时间:2022-09-10 19:56:28

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

js深拷贝数组与对象

这不是我们想要的结果。

因此我们需要对数组进行深拷贝(对象亦如是)。

一般的数组(不包括对象元素的数组),我们可以直接使用concat或slice进行深拷贝,亦或者直接写一个for循环进行逐一复制。

如:

js深拷贝数组与对象

js深拷贝数组与对象

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

js深拷贝数组与对象

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

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;
    }
  }