【胎教】JsonObject深度融合

该文章介绍了一个JavaScript类`JsonMerge`,用于深度递归地合并两个JSON对象。当直接赋值时,原始对象的内容可能会被完全替换,而`JsonMerge`类通过遍历和比较每个键值对,实现了同名属性的融合,保留了原有信息。`deepMerge`方法是关键,处理复杂嵌套的对象结构,确保所有层次的数据都能正确合并。
摘要由CSDN通过智能技术生成

 深度融合

递归融合,如果直接root.child = anotherObject.child ,原本root.child里面的内容会被完全替代,需要进行递归的每个同名项目的融合

class JsonMerge {
  constructor() {
    this.json = {};
  }

  add(obj) {
    const data = JSON.parse(obj);
    Object.keys(data).forEach((item) => {
      if (this.json[item] === undefined) {
        this.json[item] = JSON.parse(JSON.stringify(data[item]));
      } else {
        this.json[item] = this.deepMerge(this.json[item], data[item]);
      }
    });
  }

  get() {
    return JSON.stringify(this.json, undefined, '  ');
  }

  deepMerge = (obj1, obj2) => {
    Object.keys(obj2).forEach((key) => {
      // eslint-disable-next-line no-param-reassign
      obj1[key] = obj1[key] && obj1[key].toString() === '[object Object]' ? this.deepMerge(obj1[key], obj2[key]) : (obj1[key] = obj2[key]);
    });
    return obj1;
  }
}

module.exports = JsonMerge;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值