深度拷贝函数的实现

原生实现深度拷贝函数
function typeIs(data) {
  if (!data) return typeof data
  return data.constructor.name
}
function deepClone (data,cache = new WeakMap()) {
   if (!data || typeof data !== 'object' || typeIs(data) === 'Date' || typeIs(data) === 'RegExp') return data
   if (cache.get(data)) {
     return cache.get(data)
   }
   if (typeIs(data) === 'Set') {
     let temp = new Set()
     cache.set(data,temp)
     for (let v of data) {
        temp.add(deepClone(v,cache))
     }
     return temp
   }
   if (typeIs(data) === 'Map') {
     let temp = new Map()
     cache.set(data,temp)
     for (let [key,v] of data) {
        temp.set(key,deepClone(v,cache))
     }
     return temp
   }
   let obj = Array.isArray(data) ? [] : {}
   cache.set(data,obj)
   for (let key of Reflect.ownKeys(data)) {
     let v = data[key]
     if (Array.isArray(data) && key === 'length') continue;
     obj[key] = deepClone(v,cache)
   }
   return obj
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值