实现深拷贝可以避免对象之间的引用关系,当原始对象的属性值发生变化时,深拷贝后的对象不受影响。
以下是通过 JavaScript 实现深拷贝的几种方式:
手动实现深拷贝
function deepClone(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
let result;
if (Array.isArray(obj)) {
result = [];
for (let i = 0; i < obj.length; i++) {
result.push(deepClone(obj[i]));
}
} else {
result = {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
result[key] = deepClone(obj[key]);
}
}
}
return result;
}
使用 JSON 序列化和反序列化实现深拷贝
const newObj = JSON.parse(JSON.stringify(oldObj));
需要注意的是,这种方式不支持复制函数、正则等特殊对象。
使用第三方库如 Lodash 实现深拷贝
const newObj = _.cloneDeep(oldObj);
以上几种方式可以根据实际情况进行选择,手动实现深拷贝较为灵活,而使用 JSON 序列化和反序列化效率较高,使用第三方库则更为便捷。