實現深拷貝可以避免對象之間的引用關系,當原始對象的屬性值發生變化時,深拷貝后的對象不受影響。
以下是通過 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 序列化和反序列化效率較高,使用第三方庫則更為便捷。