Implementación manuscrita de JavaScript front-end: copia superficial, copia profunda

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;
    }

рекомендация

отblog.csdn.net/xiaorunye/article/details/130073035
рекомендация