深拷贝的几种方式
1. 通过JSON的拷贝方式
代码如下(示例):
// 定义简单的对象
let objC = {
a: 'zs',
age: 18,
arr: [1, 2, 3, 4],
obj: { str: 'ls', age: 18 }
}
// 拷贝
let objA = JSON.parse(JSON.stringify(objC))
console.log(objA)
通过使用JSON的方法可以解决很多类型的拷贝
2. 定义函数
代码如下(示例):
// 标准的深拷贝 => 针对引用数据类型
function deepClone(source) {
// [] => Array(基类) {} => Object
const targetObj = source.constructor === Array ? [] : {}
for (let keys in source) {
if (source.hasOwnProperty(keys)) {
// keys => 3种,基本数据,数组,对象
// 以下证明是引用数据类型
if (source[keys] && typeof source[keys] === 'object') {
// 维护层代码
// targetObj[keys] = source[keys].constructor === Array ? [] : {};
// 递归
targetObj[keys] = deepClone(source[keys])
} else {
// 基本数据类型就是赋值
targetObj[keys] = source[keys]
}
}
}
return targetObj
}
// 测试
// 定义简单的对象
let objC = {
a: 'zs',
age: 18,
arr: [1, 2, 3, 4],
obj: { str: 'ls', age: 18 }
}
let newObjC = deepClone(objC)
newObjC.a = '王五'
newObjC.arr.push(100)
console.log(objC, newObjC)
打印出来的newObjC就是拷贝objC 的