深度克隆
方案一
cloneDeep = (data) => {
if (Array.isArray(data)) {
const newData = []
data.forEach((i) => {
newData.push(cloneDeep(i))
})
return newData
}
if (typeof data === 'object' && data !== null) {
const newData = {}
for (const key in data) {
newData[key] = cloneDeep(data[key])
}
return newData
}
return data
}
方案二
cloneDeep1 = (obj) => {
return new Promise((resolve, reject) => {
const { port1, port2 } = new MessageChannel()
port1.postMessage(obj)
port2.onmessage = (msg) => {
resolve(msg.data)
}
})
}
示例
const obj={
a: 1,
b: 2,
c: () => {
console.log(123)
},
d: undefined,
e: null,
}
cloneDeep(obj) //{a: 1, b: 2, d: undefined, e: null, c: ƒ} //可克隆函数
const obj1={
a: 1,
b: 2,
d: undefined,
e: null,
}
obj1.f=obj1
cloneDeep1(obj1).then((res)=>{console.log(res)}) //![在这里插入图片描述](https://img-blog.csdnimg.cn/d62ab98860b7423ea75a3b3ad86a9564.png)