继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

深拷贝代码基本实现过程

慕移动7359049
关注TA
已关注
手记 2
粉丝 0
获赞 0

//声明待拷贝对象 obj2

let obj2={

  age:18,

    name: "lirong",

    pattners: {

         zhangsan: {

             age: 19,

             name: "zhangsan"

         },

         lisi:{

             age: 20,

             name: "lisi",

             pattners :[ {name:'甲',age: 18}, {name:'乙'},{name:'丙'},{name:'丁'},'']

         }

    }

};


 

/**

 * 递归深拷贝对象

 * @param {*} obj 参数是对象或者数组

 */

function copyObj(obj={}){

   

    if(obj==null || typeof obj!== 'object')//判断是不是对象或者数组

    {

     return obj ;

    }  

 

    let newobj;

    if(obj.constructor === Array){//如果是数组 初始化数组形式

        newobj=[];

    }

    else{//是对象

        newobj={};

    }


    for(let key in obj){ //遍历并拷贝   如果当前节点是对象继续往下遍历

        newobj[key]= copyObj(obj[key]);

    }


    return newobj;


}


let copyobjresult=copyObj(obj2);

copyobjresult.age=22;  

console.log( obj2);//结果 obj2.age 是18

console.log( copyobjresult);//结果 copyobjresult.age 是22    两个对象互不影响,深拷贝实现


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP