深拷贝实现的方法

<script>

   const obj ={
    name: '小明',
    age: 18,
    hobby: ['吃饭','睡觉'],
    info :{
        address: '北京',
        area: '朝阳',
    },
    show() {
        console.log(123)
    }
  }

  const str = JSON.stringify(obj)
  const result = JSON.parse(str)

</script>

注意:这种方法不会深拷贝原来对象中的函数 ,函数会丢失

  <script>
    const obj = {
      name: 'zs',
      age: 20,
      hobby: ['吃饭', '睡觉', '打豆豆'],
      info: {
        address: '北京',
        area: '顺义',
        class: [1, 2, 3]
      },
      show() {
        console.log('show函数被调用了!')
      }
    }

    function deepClone(val) {
      if (typeof val === 'object' && val !== null) {
        // 有必要进行深拷贝
        // newObj 中存放的,是深拷贝的结果
        const newObj = Array.isArray(val) ? [] : {}
        // TODO:对 val 进行 for...in... 深拷贝
        for (const k in val) {
          // console.log(k, val[k])
          newObj[k] = deepClone(val[k])
        }
        return newObj
      } else {
        // 没必要进行深拷贝
        return val
      }
    }

    // const result = deepClone(['a', 'b', 'c'])
    // const result = deepClone({ name: 'zs', age: 20, info: { a: 1, b: 2 } })
    const result = deepClone(obj)
    console.log(result)
  </script>

递归方式实现深拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值