攻防世界_Re_新手區_no-strings-attached
阿新 • • 發佈:2022-04-18
JS 中深拷貝的幾種實現方法
使用遞迴的方式實現深拷貝
//使用遞迴的方式實現陣列、物件的深拷貝
function deepClone1(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] = deepClone1(obj[key]); } else { objClone[key] = obj[key]; } } } } return objClone; }
通過 JSON 物件實現深拷貝
//通過js的內建物件JSON來進行陣列物件的深拷貝
function deepClone2(obj) {
var _obj = JSON.stringify(obj),
objClone = JSON.parse(_obj);
return objClone;
}
JSON物件實現深拷貝的一些問題
- 無法實現對物件中方法的深拷貝
通過jQuery的extend方法實現深拷貝
var array = [1,2,3,4];
var newArray = $.extend(true,[],array);
Object.assign()拷貝
當物件中只有一級屬性,沒有二級屬性的時候,此方法為深拷貝,但是物件中有物件的時候,此方法,在二級屬性以後就是淺拷貝。
lodash函式庫實現深拷貝
lodash很熱門的函式庫,提供了 lodash.cloneDeep()實現深拷貝