JS 深拷贝(自己封装可遍历属性的深拷贝)
1. 第一种(只针对可遍历属性的数据进行深拷贝)
// 深拷贝方法 第一种
function deepClone(data) {
if (typeof data !== 'object' || data === null) return data
let newData = Array.isArray(data) ? [] : {}
deepCheck(newData, data)
return newData
}
function deepCheck(newData, oldData) {
for (var key in oldData) {
if (oldData[key] instanceof Array) {
newData[key] = []
deepCheck(newData[key], oldData[key])
} else if (oldData[key] instanceof Object) {
newData[key] = {}
deepCheck(newData[key], oldData[key])
} else {
newData[key] = oldData[key]
}
}
}
2. 第二种(只针对可遍历属性的数据进行深拷贝)
// 深拷贝方法 第二种
function deepCopy(data) {
if (typeof data !== 'object' || data === null) return data
let newData = data instanceof Array ? [] : {}
for (let key in data) {
newData[key] = typeof data[key] === 'object' ? deepCopy(data[key]) : data[key]
}
return newData
}