浅拷贝/深拷贝的手写实现【每日一道编程题】

240 阅读1分钟

哈喽,大家好,好久没更新文章了,假期在一家小公司实习,额比较忙,大家都懂的。。。 现在大四了,珍惜在学校的最后俩月时间,巩固基础!

坚持每日一题!

    // 浅拷贝:只拷贝指针,如果数组基本数据类型,则互不影响,如果数组类型为对象/数组,则一方变化,另一方也会跟着变化
    // 方法:slice concat
    // 浅拷贝的实现
    var shallowCopy = (obj) => {
        if (typeof obj === 'Object') return
        var newObj = obj instanceof Array ? [] : {}
        for (key in obj) {
            if (obj.hasOwnProperty(key)) {
                newObj = obj[key]
            }
        }
        return newObj
    }
    shallowCopy()

    // 深拷贝:拷贝全部内容,并会开辟新的内存空间存储,前后互不影响
    // 方法:JSON.parse(JSON.stringify()) 原因是:利用stringify将js对象转换为JSON字符串,然后再通过parse方法将字符串反序列化为js对象
    // 深拷贝的实现 (浅拷贝基础上 递归)
    var deepCopy = (obj) => {
        if (typeof obj === 'Object') return
        var newObj = obj instanceof Array ? [] : {}
        for (key in obj) {
            if (obj.hasOwnProperty(key)) {
                newObj = typeof obj[key] === 'Object' ? deepCopy(obj[key]) : obj[key]
            }
        }
        return newObj
    }
    deepCopy()