JavaScript 深拷贝函数实现 - deepCopy() 解释
JavaScript 深拷贝函数实现 - deepCopy() 解释
这段代码是一个实现深拷贝的函数,名为 deepCopy(obj)。深拷贝是指创建一个新的对象或数组,将原对象或数组的所有属性和元素都复制到新的对象或数组中,而不是简单地引用原对象或数组的地址。
function deepCopy(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
let copy = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
copy[key] = deepCopy(obj[key]);
}
}
return copy;
}
函数解释:
-
参数判断: 函数接受一个参数
obj,代表要进行深拷贝的对象或数组。首先,通过判断obj的类型是否为对象或数组,以及是否为null,来确定是否需要进行深拷贝。如果不需要深拷贝,则直接返回原对象或数组。 -
创建新对象: 接着,根据
obj的类型,创建一个新的对象或数组,作为深拷贝的结果。 -
循环遍历: 使用
for...in循环遍历obj的所有属性或元素。在每次循环中,使用hasOwnProperty()方法来判断key是否为obj自身的属性,而不是继承自原型链。如果是自身的属性,就递归调用deepCopy函数,将当前属性或元素作为参数,来进行深拷贝。最后,将深拷贝的结果赋值给新对象或数组的对应属性或元素。 -
返回结果: 最后,返回深拷贝的结果。
递归调用: 这个函数的递归调用保证了无论 obj 的层级多深,都能正确地进行深拷贝。例如,如果 obj 是一个包含另一个对象的数组,那么 deepCopy 函数会递归调用自身来拷贝内部的对象,从而确保所有嵌套的属性和元素都被复制。
总结: deepCopy 函数通过递归调用实现了深拷贝的功能,确保了原对象或数组的属性和元素被完整地复制到新的对象或数组中,避免了引用传递带来的问题。
原文地址: https://www.cveoy.top/t/topic/qtCT 著作权归作者所有。请勿转载和采集!