copia superficial
Copia superficial: generalmente se refiere a copiar la primera capa de un objeto a un nuevo objeto
// 浅拷贝
function shallowCopy(object) {
// 只拷贝对象类型
if (!object || typeof object !== "object") return;
// 根据object的类型判断是新建一个数组还是对象
let newObject = Array.isArray(object) ? [] : {
};
// 遍历object,并且判断是object的属性才拷贝
for (let key in object) {
if (Object.prototype.hasOwnProperty.call(object, key)) {
newObject[key] = object[key];
}
}
return newObject;
}
copia profunda
Copia profunda: generalmente, debe realizarse por recursividad. Si el valor del objeto sigue siendo un objeto, se requiere una copia profunda adicional para reemplazar completamente la referencia de cada tipo complejo.
// 深拷贝
function deepCopy(object) {
if (!object || typeof object !== "object") return;
let newObject = Array.isArray(object) ? [] : {
};
for (let key in object) {
// 判断是object的属性才拷贝
if (Object.prototype.hasOwnProperty.call(object, key)) {
newObject[key] =
typeof object[key] === "object" ? deepCopy(object[key]) : object[key];
}
}
return newObject;
}