对象深度合并 js

介绍

  1. 配置项有原有配置项的情况下,又不想变动其他的配置又能更改提出来配置。参考 echarts 的配置
  2. 本文以递归的方式,实现了对象格式检查并替换,数组的话可以跟着规则添加就行;
  3. 支持相同属性的值以传入的属性值为主;在原配置没有的属性则直接加进去(当前级);
  4. 根据第三点可以支持 echarts、地图等二次封装配置。

实现代码 (修改传入的第二个参数值)

export function mergeObject<T extends object, P extends object>(
  base: T,
  patch: P
): T {
  function merge(a: any, b: any): any {
    if (
      typeof a !== 'object' ||
      typeof b !== 'object' ||
      Array.isArray(a) ||
      Array.isArray(b)
    ) {
      return b !== undefined ? b : a;
    }
    const result: any = {};
    for (const key in a) {
      if (a.hasOwnProperty(key)) result[key] = merge(a[key], b[key]);
    }
    return result;
  }
  return merge(base, patch);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值