博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

js 手写深拷贝

Posted on 2021-03-05 18:10  米粒3  阅读(76)  评论(0编辑  收藏  举报

简单需求的话:直接 JSON.parse(JSON.stringify(someobj))

复杂需求的话:实现一个”完美“的深拷贝,只能求教上百行代码的 Lodash.cloneDeep() 了

面试够用版:

function deepClone(someobj){
    let cloneObj;
    //简单数据类型时
    if(typeof someobj!='object'){ cloneObj=someobj}
    else if(someobj&&typeof someobj=='object'){
         cloneObj=Array.isArray(someobj)?[]:{};
         //遍历对象属性
         for(let key in someobj){
              //过滤掉对象原型上的属性
              if(someobj.hasOwnPrototype(key)){
                   if(someobj[key]&&typeof(someobj[key])=='object'){
                        cloneObj[key]=deepClone(someobj[key]);
                   }
                   else{
                       cloneObj[key]=someobj[key]
                   }
              }
         }
    }
    return cloneObj;
}