下面總結(jié)幾種深拷貝的方法:
- JSON
JSON.parse(JSON.stringify());
JSON.stringify方法會忽略對象的不可遍歷屬性。 - 自己手寫一個(gè)函數(shù)
function clone(target) {
if(typeof target === 'object'){
let copydata = Array.isArray(target)?[]:{}
for(let key in target) {
copydata[key] = clone(target[key])
}
return copydata
}else {
return target
}
}
- 對于循環(huán)引用的對象進(jìn)行深拷貝
function clone(target, map = new Map()) {
if (typeof target === 'object') {
let cloneTarget = Array.isArray(target) ? [] : {};
if (map.get(target)) {
return map.get(target);
}
map.set(target, cloneTarget);
for (const key in target) {
cloneTarget[key] = clone(target[key], map);
}
return cloneTarget;
} else {
return target;
}
}