• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

考虑循环引用的深拷贝

武飞扬头像
我会吐泡泡
帮助1

先看下深拷贝常用的几种方式

  1. 使用 JSON 序列化和反序列化:通过将对象转换为 JSON 字符串,然后再将其解析为新的对象,实现深拷贝。这种方式可以处理大部分的常规对象和数组,但会忽略特殊对象的属性和方法。
  2. 使用第三方库:许多 JavaScript 第三方库提供了深拷贝的实现,如 lodash、jQuery 等。这些库通常提供了比原生实现更强大和灵活的方法来实现深拷贝。例如,使用 lodash 的 cloneDeep 方法可以方便地实现深拷贝。
  3. 那就是手撸一个了,一般在项目中可以包裹成一个hook函数提出来。下面是核心代码:
    const deepClone = (obj) => {
        const map = new Map()
        map.set(obj, true)
       
        const copy = (obj) => {
           if (!obj || typeof obj !== 'object') {
              return {}
           }
        // 根据情况判断用数组还是对象装
           const newObj = Array.isArray(obj) ? [] : {}

           for (const key in obj) {
              const value = obj[key]
              // 如果拷贝的是简单类型的值直接进行赋值
              if (typeof value !== 'object') {
                 newObj[key] = value
              } else {
                  // 如果拷贝的是复杂数据类型
                  //第一次拷贝后将value存入map,再次遇到说明value之前已经遍历遇到了
                 if (map.has(value)) {
                    newObj[key] = null
                 } else {
                    map.set(value, true)
                    newObj[key] = copy(value)
                 }
              }
           }
           return newObj
        }
        
        return copy(obj)
     }

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgbaici
系列文章
更多 icon
同类精品
更多 icon
继续加载