JavaScript 对象深拷贝:使用递归实现深拷贝对象及数组
JavaScript 对象深拷贝:使用递归实现深拷贝对象及数组
深拷贝是指创建一个完全独立的副本,修改副本不会影响原始对象。对于包含数组的复杂对象,可以使用递归实现深拷贝。
实现方法:
- 递归遍历对象的所有属性。
- 如果属性值是对象或数组,则递归调用深拷贝函数。
- 否则直接复制属性值。
代码示例:
function deepClone(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
let result = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
result[key] = deepClone(obj[key]);
}
}
return result;
}
使用示例:
const obj = {
a: 1,
'b': [2, 3, 4],
'c': {
'd': 5,
'e': [6, 7, 8]
}
};
const newObj = deepClone(obj);
console.log(newObj); // { a: 1, b: [2, 3, 4], c: { d: 5, e: [6, 7, 8] } }
newObj['b'].push(9);
newObj['c']['e'].push(10);
console.log(obj); // { a: 1, b: [2, 3, 4], c: { d: 5, e: [6, 7, 8] } }
console.log(newObj); // { a: 1, b: [2, 3, 4, 9], c: { d: 5, e: [6, 7, 8, 10] } }
解释:
deepClone函数首先判断obj是否为对象或 null,如果不是,则直接返回obj。- 否则,根据
obj是否为数组,创建一个新的数组或对象result。 - 遍历
obj的所有属性,并使用递归调用deepClone函数复制每个属性值。 - 最后返回
result,即深拷贝后的副本。
结论:
使用递归可以有效地实现 JavaScript 对象的深拷贝,确保副本和原始对象之间完全独立。
原文地址: https://www.cveoy.top/t/topic/oykG 著作权归作者所有。请勿转载和采集!