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}`)
    嘴角上扬,记得微笑
  • 相关阅读:
    Oracle----oracle编程总结
    Oracle----oracle 事务总结
    Oracle----Oracle 11g XE release2安装与指导
    KMP之Z-function (扩展kmp)
    pkg-config
    对拍
    GPU并行编程小结
    DPHARD
    贪心/字符串好题
    树专题(伸展树 / 树链剖分 / 动态树 学习笔记)
  • 原文地址:https://www.cnblogs.com/jardeng/p/15010628.html
Copyright © 2011-2022 走看看