Object.assign只能深拷贝第一层的数据,如果有多层数据就会出现浅拷贝的情况
// 处理深拷贝问题 一个对象里面可能会出现多种情况,
let a = {
a:1,
b:[1,2,3,{a:1},[1,2]],
c:{c1:1,c2:2,c3:{cc1:1}},
d:function(){
console.log(1)
},
e:[{a:1},{b:1}],
f:[{a:1},{b:1},[1,2]],
}
let b = AssignObject(a)
b.a = 2
b.b[0] = 2
b.b[3] = {a:2}
b.b[4] = [2,2]
b.c.c1 = 2
b.c.c3.cc1 = 2
b.d = function(){console.log(2)}
b.e[0].a = 2
b.f[0].a = 2
b.f[2] = [2,2]
console.log(a,b)
AssignObject (obj) {
var target = obj instanceof Array ? [] : {}
if(obj instanceof Array) {
obj.forEach(item=>{
if(item instanceof Object && typeof item !=='function'){
target.push(AssignObject(item))
} else {
target.push(item)
}
})
return target
}
for( var i in obj){
// if(obj[i] instanceof Array){
// target[i] = AssignObject(obj[i])
// } else if(obj[i] instanceof Object && !(obj[i] instanceof Array) && typeof obj[i] !=='function') {
// target[i] = AssignObject(obj[i])
// } else {
// target[i] = obj[i]
// }
if(obj[i] instanceof Object && typeof obj[i] !=='function') {
target[i] = AssignObject(obj[i])
} else {
target[i] = obj[i]
}
}
return target
}