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;
    }
  }
相關文章
相關標籤/搜索