深拷贝

手写深拷贝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()方法实现深拷贝时
对象里的 function 和 undefined 方法会被剔除, Map和Set会被转换成空对象。数组里的
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": {}
    }
* 

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容