zoukankan      html  css  js  c++  java
  • js 实现对象深拷贝

    /**
     * 深拷贝
     * @param {*} obj 需拷贝的对象
     * @returns 深拷贝后的对象
     */
    function copyObj (obj) {
      // 对于原始类型和常见的非值,直接返回原来值
      if ([NaN, null].includes(obj)) return obj
      if (['number', 'string', 'boolean', 'null', 'undefined', 'function', 'symbol'].includes(typeof obj)) {
        return obj
      }
    
      const objCopy = Array.isArray(obj) ? [] : {}
      for (const key in obj) {
        objCopy[key] = typeof obj[key] === 'object' ? copyObj(obj[key]) : obj[key]
      }
      return objCopy
    }
    var obj1 = {
      name: 'zhangsan',
      age: 18,
      details: {
        like: ['打篮球', '唱歌'],
        sex: 1,
        tags: [18, 23]
      }
    }
    
    var r1 = copyObj(NaN) // NaN
    console.log(r1)
    var r1 = copyObj(null)
    console.log(r1) // NaN
    var r1 = copyObj(1)
    console.log(r1) // NaN
    var r1 = copyObj('test')
    console.log(r1) // 'test'
    var r1 = copyObj(true)
    console.log(r1) // true
    var r1 = copyObj(undefined)
    console.log(r1) // undefined
    var r1 = copyObj(() => { })
    console.log(r1) // () => { }
    var obj2 = copyObj(obj1)
    console.log('obj2', obj2, `obj1 是否等于 obj2, ${obj1 === obj2}`)
    嘴角上扬,记得微笑
  • 相关阅读:
    洛谷 P6622
    洛谷 P6619
    LOJ 3188
    CF::Gym 102174G
    eJOI2017~2019
    洛谷 P6313
    洛谷 P6305
    JSOI2020 酱油记
    洛谷 P6234
    CodeForces 1334F
  • 原文地址:https://www.cnblogs.com/jardeng/p/15010628.html
Copyright © 2011-2022 走看看