深拷贝的实现方式
Posted coderkey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深拷贝的实现方式相关的知识,希望对你有一定的参考价值。
一,用递归去复制所有层级属性
function deepClone(obj)
let objClone = Array.isArray(obj) ? [] : ;
if (obj && typeof obj === "object")
for (key in obj)
if (obj.hasOwnProperty(key)) //判断obj的子属性是否为对象,如果是,递归复制
if (obj[key] && typeof obj[key] === "object")
objClone[key] = deepClone(obj[key]);
else //如果不是,简单复制
objClone[key] = obj[key];
// objClone[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key]
return objClone;
// 对象
let oldObj =
a: 1,
b:
c: 2,
d: 2
newObj = deepClone(oldObj);
oldObj['b'].d = 3
console.log(oldObj, newObj);
console.log(oldObj === newObj);
// 数组
let oldArr = [1, 2, 3, [4,4]]
newArr = deepClone(oldArr);
oldArr[3][1] = 5
console.log(oldArr, newArr);
console.log(oldArr === newArr);
二,用JSON对象的parse和stringify实现
function deepClone(obj)
let _obj = JSON.stringify(obj),
objClone = JSON.parse(_obj);
return objClone
// 对象
let oldObj =
a: 1,
b:
c: 2,
d: 2
newObj = deepClone(oldObj);
oldObj['b'].d = 3
console.log(oldObj, newObj);
console.log(oldObj === newObj);
// 数组
let oldArr = [1, 2, 3, [4,4]]
newArr = deepClone(oldArr);
oldArr[3][1] = 5
console.log(oldArr, newArr);
console.log(oldArr === newArr);
三,注意
(1)深拷贝,是拷贝对象各个层级的属性;
(2)concat
与slice
方法,只能拷贝第一层属性,他们都不是真正的深拷贝;
以上是关于深拷贝的实现方式的主要内容,如果未能解决你的问题,请参考以下文章