用递归函数完成数据的深拷贝

155 阅读1分钟

1.浅拷贝 与 深拷贝

浅拷贝: 拷贝地址, 修改拷贝后的数据对原数据有影响
深拷贝: 拷贝数据, 修改拷贝后的数据对原数据没有影响

2.深拷贝实现方式

(1)SON : let newObj = JSON.parse( JSON.stringify( obj ) )                      
(2)递归函数
let obj = {
            name:'张三',
            age:20,
            hobby:['学习','上课','干饭'],
            student:{
                name:'尼古拉斯赵四',
                age:38
            }
        }

        //深拷贝函数
        function copy(obj,newObj){
            for(let key in obj ){
                if( obj[key] instanceof Array ){
                    newObj[key] = []
                    //递归调用 继续深拷贝数组
                    copy(obj[key],newObj[key])
                }else if( obj[key] instanceof Object ){
                    newObj[key] = {}
                    //递归调用 继续深拷贝对象
                    copy(obj[key],newObj[key])
                }else{
                    newObj[key] = obj[key]
                }
            }
        }

        //开始拷贝
        let newObj = {}
        copy(obj,newObj)

        newObj.name = '李四'
        newObj.hobby[0] = '游戏'
        newObj.student.name = '111'
        console.log(obj,newObj)