对象深拷贝的几种方法
1. 使用对象自带的方法assign
const obj = {
name: "wyb",
bornYear: "1997",
skill: ["dance", "sing", "action"],
dance: function() {
console.log('神的孩子在跳舞');
}
}
/** Object.assign
* 深拷贝对象
* 合并对象
*
*/
const copyObj = Object.assign({}, obj);
console.log('copyObj---', copyObj);
copyObj.name = "bo"
// Object.assign 深拷贝
console.log('复制后的对象', copyObj, obj);
使用Object.assign()可以实现对象深拷贝
2. 使用递归的方法实现深拷贝
function deepCopy(newobj, oldobj) {
for (let k in oldobj) {
// 判断我们的属性值属于哪种数据类型
// 1.获取属性值 oldobj[k]
let item = oldobj[k];
// 判断这个是否为数组
if (item instanceof Array) {
newobj[k] = [];
deepCopy[newobj[k], item];
} else if (item instanceof Object) {
// 3. 判断这个值是否是对象
newobj[k] = [];
deepCopy[newobj[k], item];
} else {
// 4. 属于简单数据类型
newobj[k] = item;
}
}
}
不管是数组还是对象,都可以使用这个方法实现深拷贝
3. 使用JSON对象实现深拷贝
JSON.parse(JSON.stringify(obj))
解析需要耗费较多时间,不建议使用
4. 扩展运算符
let bar = { a: 1, b: 2 };
let baz = { ...bar }; // { a: 1, b: 2 }
扩展运算符相当于Object.assign()