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()