在 JavaScript 中,实现对象的深拷贝
- 手动实现深拷贝函数
手动实现深拷贝函数可以通过递归实现对对象及其嵌套属性的深度复制,例如:
function deepCopy(obj) {
let copy = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (typeof obj[key] === "object") {
copy[key] = deepCopy(obj[key]);
} else {
copy[key] = obj[key];
}
}
return copy;
}
2.使用 JSON 序列化和反序列化
利用 JSON.stringify() 和 JSON.parse() 可以实现对象的深拷贝,但是该方法存在一定的限制,例如无法复制函数和原型链等,同时也不能复制循环引用对象。
let obj = { foo: "bar", arr: [1, 2, 3], obj: { a: 1, b: 2 } };
let copy = JSON.parse(JSON.stringify(obj));
3.使用第三方库
使用第三方库如 lodash、underscore 等,可以快速、简单地实现对象的深拷贝。
const _ = require('lodash');
let obj = { foo: "bar", arr: [1, 2, 3], obj: { a: 1, b: 2 } };
let copy = _.cloneDeep(obj);
4.使用 ES6 的 Object.assign() 方法
Object.assign() 方法可以将多个对象的属性复制到目标对象中,也可以实现浅拷贝和深拷贝,但是不能处理嵌套对象的深度复制。
let obj = { foo: "bar", arr: [1, 2, 3], obj: { a: 1, b: 2 } };
let copy = Object.assign({}, obj);
完结