在 JavaScript 中实现深拷贝(Deep Copy)可以使用以下几种方法:
手动递归复制:
使用递归的方式遍历对象或数组,对每个属性进行复制操作。当遇到对象或数组时,再递归调用深拷贝函数。这种方法可以处理多层嵌套的数据结构,但要注意避免循环引用。
function deepCopy(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
let copy;
if (obj instanceof Array) {
copy = [];
for (let i = 0; i < obj.length; i++) {
copy[i] = deepCopy(obj[i]);
}
} else {
copy = {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
copy[key] = deepCopy(obj[key]);
}
}
}
return copy;
}
// 使用示例
const originalObj = { name: 'John', age: 25, hobbies: ['reading', 'running'] };
const copiedObj = deepCopy(originalObj);
使用 JSON 序列化和反序列化:
将对象转换为 JSON 字符串,然后再将 JSON 字符串转换回对象。这种方法简单易用,但可能会有一些限制,例如无法复制特定类型的对象或函数。
function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj));
}
// 使用示例
const originalObj = { name: 'John', age: 25, hobbies: ['reading', 'running'] };
const copiedObj = deepCopy(originalObj);
需要注意的是,使用 JSON 序列化和反序列化的方法会丢失一些特殊的对象属性或方法,如函数、正则表达式、日期对象等。在选择深拷贝方法时,根据具体的需求和数据类型进行选择。