深拷贝的简单实现

浅拷贝与深拷贝

关于深浅拷贝,相信大家也都挺熟悉的了
用生活的举例子来说明就是

  • 浅拷贝就是“换汤不换药”,就好像加多宝和王老吉,它们的不一样的品牌,但是喝起来的味道是一样的

  • 深拷贝就是“双胞胎”,两张长一样,但是都是互相独立的个体

而在javascrpit中也提供的很多API来实现深拷贝,浅拷贝的话就不啰嗦了
接下来就开始进入实现深拷贝的流程

1. JSON.parse(JSON.stringify())

实现深拷贝最简单的实现方式,这种实现的深拷贝可以满足我们开发业务中大多数的场景要求
但是,有个弊端就是因为当前的原理是其转为JSON数据再转回原数据,所以如果当前数据不支持转JSON
的就会失效
,比如如果一个key的value是function,那么拷贝过后就是undefined

 let obj = {
     name: '张三',
     fun: function(){}
 }
 let obj2 = JSON.parse(JSON.stringify(obj))
 //fun丢失
 console.log(obj) // obj = { name: '张三', fun: f() }
 console.log(obj2) // obj = { name: '张三' }

2.手写递归方式

递归方法实现深度克隆原理:遍历对象、数组直到里边都是基本数据类型,然后再去复制,就是深度拷贝

下面我们着手实现一个简单版本的递归深度拷贝

let obj = {
   name: '张三',
   list: [1,5,6,2,8,8,9]
}
    
function copyClone(obj){
      if(typeof obj === 'object'){
          let result = Array.isArray(obj)?[]:{}
          for (const key in obj) {
              result[key] = copy(obj[key])
          }
          return result
      }else{
         return obj
   }
}
console.log(copyClone(obj)) //obj = { name: '张三', list: [1,5,6,2,8,8,9]}

深拷贝的婴儿版本就这样诞生了!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值