对数组、对象进行深度拷贝的方法
function deepClone (data, newData) {
if (typeof data === 'object' && data) {
if (Array.isArray(data)) {
newData = []
data.forEach((k) => {
newData.push(deepCopy(k))
})
} else {
newData = {}
Object.keys(data).forEach((k) => {
newData[k] = deepCopy(data[k])
})
}
} else {
newData = data
}
return newData
}
其他拷贝方法
// 使用JSON方法的存在的问题
// 对象的方法和值为new Date()的数据,转换之后会改变数据
function deepClone(data){
return JSON.parse(JSON.stringify(data))
}
// 以下两种方法都只能拷贝第一层,再深层的还是同一个引用数据
function deepCloneObject (data) {
return Object.assign({}, data)
}
function deepCloneArray (data) {
return data.slice()
}