You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对比两个对象数组并生成包含差异的新对象数组?

对象数组差异对比实现

需求说明

对比两个对象数组,生成包含新旧属性差异的新对象数组:当原数组有对应索引的对象时,保留新旧属性值;原数组无对应对象时,旧属性值设为null。

示例输入

const objA = [{"name":"Karthi","age":25,"education":"Masters","city":"Chennai","country":"India"}]
const objB = [{"name":"Meenakshi","age":28,"education":"UG","city":"Pune","country":"India"},{"name":"Mani","age":31,"education":"Masters","city":"Madurai","country":"India"}]

预期输出

[{"oldName":"Karthi","newName":"Meenakshi","oldAge":25,"newAge":28,"oldEducation":"Masters","newEducation":"UG","oldCity":"Chennai","newCity":"Pune","country":"India"},{"oldName":null,"newName":"Mani","oldAge":null,"newAge":31,"oldEducation":null,"newEducation":"Masters","oldCity":null,"newCity":"Madurai","country":"India"}]

代码实现

function compareObjectArrays(arrA, arrB) {
  return arrB.map((newObj, index) => {
    const result = {};
    const oldObj = arrA[index] || {};
    
    Object.keys(newObj).forEach(key => {
      // 按示例规则,country属性直接保留新值
      if (key === 'country') {
        result[key] = newObj[key];
        return;
      }
      // 生成新旧属性键名,旧值不存在时设为null
      const capitalizedKey = key.charAt(0).toUpperCase() + key.slice(1);
      result[`old${capitalizedKey}`] = oldObj[key] ?? null;
      result[`new${capitalizedKey}`] = newObj[key];
    });
    
    return result;
  });
}

// 测试示例
const objA = [{"name":"Karthi","age":25,"education":"Masters","city":"Chennai","country":"India"}];
const objB = [{"name":"Meenakshi","age":28,"education":"UG","city":"Pune","country":"India"},{"name":"Mani","age":31,"education":"Masters","city":"Madurai","country":"India"}];

console.log(compareObjectArrays(objA, objB));

逻辑说明

  • 以目标数组arrB为基准,遍历每个对象生成差异项
  • 匹配arrA对应索引的对象,无对应对象则用空对象兜底
  • 对每个属性做差异化处理:
    • country属性直接保留新对象的值(符合示例规则)
    • 其他属性生成oldXxx和newXxx格式的键名,旧值不存在时设为null
  • 最终返回整理后的差异对象数组

内容的提问来源于stack exchange,提问作者karthi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:35:24