深拷贝js
JSON
最简单的一个
let obj = {}
let newObj = JSON.parse(JSON.stringify(obj))
弊端:这种方法无法拷贝function函数,undefined,Date,Reg,Set,Map等
递归拷贝obj
function DeepClone(obj) {
var Map1 = new Map()
function deepClone(obj) {
var objClone = Array.isArray(obj) ? [] : {}
if (obj && typeof obj === "object") {
for (let key in obj) {
if (obj.hasOwnProperty(key) ) {
if (obj[key] && typeof obj[key] === "object" && !Map1.has(obj[key])) {
Map1.set(obj[key], obj[key])
console.log(Map1)
objClone[key] = deepClone(obj[key]);
} else {
objClone[key] = obj[key];
}
}
}
}
return objClone;
}
return deepClone(obj)
}
该方法解决了循环引用爆栈的问题,如果考虑想更全面,建议参考lodash的deepClone
(博客园编辑页徒手写的,可能会有bug。不过整体思路就是这样,有bug可以自己小改一下)