深拷贝和浅拷贝

44 阅读1分钟

深拷贝和浅拷贝的区别

1、浅拷贝:复制对象的引用,仅拷贝复制对象或数组的第一层结构,对于嵌套的对象或数组,仅复制引用而不是实际的对象或数组,适用于非引用类型的

2、递归复制对象或数组以及函数,及其所有浅套的对象或数组,生成一份完整的副本

常用的拷贝技巧

浅拷贝

1、Object.asign({},{}) 2、[].slice() 3、const newObj = {...obj}

深拷贝

1、JSON.parse(JSON.stringify()) 2、loash.cloneDeep() 3、手写递归遍历

function cloneDeep(obj){
    let newObj = undefined
    if(typeof obj !== 'object'){
        newObj = obj
    } else {
        if(Array.isArray(obj)){
            newObj = []
            const array = obj
            for (let index = 0; index < array.length; index++) {
                const element = array[index];
                if(typeof element  === 'object'){
                    newObj.push(cloneDeep(element))
                }else {
                    newObj.push(element)
                }
            }
        }else {
            newObj = {}
            Object.keys(obj).forEach(key => {
                if(typeof obj[key]  === 'object'){
                    newObj[key] = cloneDeep(obj[key])
                } else {
                    console.log(obj, obj[key])
                    newObj[key] = obj[key]
                }
            });
        }
    }
    return newObj
}