zoukankan      html  css  js  c++  java
  • 实现多个对象的深拷贝(合并)

    // 判断是否是普通对象
    export function isPlainObject(val: any): val is Object {
      return toString.call(val) === '[object Object]'
    }

    合并逻辑

    function deepMerge(...objs: any[]): any {
      const result = Object.create(null)
      objs.forEach(obj => {
        if (obj) {
          Object.keys(obj).forEach(key => {
            const val = obj[key]
            if (isPlainObject(val)) {
              // 这里判断 原对象上 相同键是否是一个 对象
              // 如果是将 新的对象合并到原对象上 (递归)
              if (isPlainObject(result[key])) {
                result[key] = deepMerge(result[key], val)
              } else {
                result[key] = deepMerge(val)
              }
            } else {
              result[key] = val
            }
          })
        }
      })
      return result
    }
    
    let newObj = deepMerge(
      { a: 1, b: 2, c: { a: 3, d: 4 } },
        { b: 5, c: { e: 11, f: 22 } }
    );
    console.log(newObj);
  • 相关阅读:
    Unity接入九游SDK学习与踩坑
    Linux系统下实现Tomcat的安装和项目的部署:
    mac查看端口占用情况并结束进程
    BootStrap
    ES6
    JQuery
    CSS 、JavaScript
    HTML
    XML
    数据库连接池&DBUtils
  • 原文地址:https://www.cnblogs.com/PasserByOne/p/13597411.html
Copyright © 2011-2022 走看看