JS深拷貝方法

  • 2019 年 11 月 5 日
  • 筆記

記一下js深拷貝的幾種方法

  • 使用遞歸
  • 通過JSON對象
  • 通過jQuery的extend方法
  • Object.assign()
  • lodash函數

使用遞歸

//使用遞歸的方式實現數組、對象的深拷貝  function deepClone(obj) {    //判斷拷貝的要進行深拷貝的是數組還是對象,是數組的話進行數組拷貝,對象的話進行對象拷貝    var objClone = Array.isArray(obj) ? [] : {};    //進行深拷貝的不能為空,並且是對象    if (obj && typeof obj === "object") {      for (key in obj) {        if (obj.hasOwnProperty(key)) {          if (obj[key] && typeof obj[key] === "object") {            objClone[key] = deepClone(obj[key]);          } else {            objClone[key] = obj[key];          }        }      }    }    return objClone;  }

通過JSON對象

//通過js的內置對象JSON來進行數組對象的深拷貝  function deepClone(obj) {    var _obj = JSON.stringify(obj),      objClone = JSON.parse(_obj);    return objClone;  }

tip: * 無法實現對對象中方法的深拷貝

通過jQuery的extend方法

var array = [1,2,3,4];  var newArray = $.extend(true,[],array);

Object.assign()

  • 對象中只有一級屬性,沒有二級屬性的時候,為深拷貝
  • 對象中有對象的時候,在二級屬性以後就是淺拷貝

lodash函數

lodash.cloneDeep()