深拷貝

手寫深拷貝1

function deedCopy(val) {
        let newVal = val.constructor === Array ? [] : {}
        for (var key in val) {
            // hasOwnProperty-檢測屬性是否為對象的自有屬性
            if (val.hasOwnProperty(key)) {
                if (val[key] && typeof val[key] === "object") {
                    newVal[key] = deedCopy(val[key])
                }else {
                    newVal[key] = val[key]
                }
            }
        }
        return newVal
    }

手寫深拷貝2

注: JSON.parse() 和 JSON.stringify()方法實現(xiàn)深拷貝時
對象里的 function 和 undefined 方法會被剔除, Map和Set會被轉(zhuǎn)換成空對象。數(shù)組里的
function 和 undefined 會被替換成null,

function deedCopy2(val) {
    let newVal = JSON.parse(JSON.stringify(val))
    return newVal
}

let obj2 = {
        a:  undefined,
        b: {
            aa: 2,
            bb: {
                aaa: 3
            }
        },
        c: [[1], [2], [null, undefined, ()=> {}, 0]],
        d: new Date(),
        e: new Map(),
        f: new Set(),
        g: function () {
        },
        h: undefined
    }
    let newObj = deedCopy2(obj2)
    console.log(obj2, newObj)

     /**
     newObj  =  {
        "b": {
            "aa": 2,
            "bb": { "aaa": 3}
        },
        "c": [[1], [2], [null, null, null, 0]],
        "d": "2022-12-11T11:23:36.367Z",
        "e": {}
    }
* 

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容