使用递归的方法实现深拷贝

116 阅读1分钟

使用 JSON.pare(JSON.stringify()) 实现深拷贝时,由于 JSON 中没有 symbol、函数、正则、日期等数据类型,所以存在缺陷。所以,要么引入第三方库实现深拷贝,要么通过递归的方法。

const deepCopy = function(obj){
    let cloneObj
    // 普通数据类型
    if(['number','string','boolean','undefined','symbol'].includes(typeof obj) || obj === null){
        cloneObj = obj
        return cloneObj
    }
    // 引用类型,即对象(对象、函数、数组、日期、正则)
    // 根据对象的构造函数创造一个实例对象
    cloneObj = new obj.constructor || Object
    // 将对象变成数组,再遍历和递归
    // fortEach 中的 item 等于 [key,value]。
    Object.entries(obj).forEach(([key,value]) => {
        cloneObj[key] = deepCopy(value)
    })
    return cloneObj
}
const test = {'a':1,'b':Symbol(1),'c':true,'d':undefined,'e':null,'f':{'aa':11,'bb':{'aaa':22}},'g':new Date(),'h':new RegExp()}
deepCopy(test)

image.png