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

JavaScript对比对象数组 同步主数组增删项至嵌套分组详情数组

实现思路

核心逻辑以myArray1的name列表为唯一基准,对myArray2每个分组的groupDetails做全量对齐,同时覆盖新增补全、冗余删除两个场景:

  • 第一步:从myArray1提取所有name值,生成有序的name列表和用于快速查重的Set集合,作为对齐的唯一标准
  • 第二步:遍历myArray2的每个分组,先过滤掉当前groupDetails里name不在基准集合中的冗余条目,同时把合法条目存为Map方便快速查找
  • 第三步:按照基准name列表的顺序,逐个拼接最终的groupDetails数组:如果name对应已有条目就保留原数据,不存在就生成value1、value2为0的默认条目

这种实现方式天然保证最终groupDetails的name集合、顺序和myArray1完全一致,不需要单独写差集对比的冗余逻辑。

完整代码
// 基准数组和待同步数组为题目给出的初始化值
let myArray1 = [
    {"name": "F1"},
    {"name": "F2"},
    {"name": "F3"},
    {"name": "F4"},
    {"name": "F5"},
];

let myArray2 = [
    {
      "groupName": "Group 1",
      "groupDetails": [ 
            {
              "name": "F1",
              "value1": 10,
              "value2": 22
            },
            {
              "name": "F2",
              "value1": 14,
              "value2": 25
            },
            {
              "name": "F3",
              "value1": 9,
              "value2": 2
            }
       ]
    },
    {
      "groupName": "Group 2",
      "groupDetails": [ 
            {
              "name": "F1",
              "value1": 110,
              "value2": 222
            },
            {
              "name": "F2",
              "value1": 0,
              "value2": 55
            },
            {
              "name": "F3",
              "value1": 12,
              "value2": 12
            }
       ]
    }
]

// 同步逻辑开始
// 1. 生成基准name的有序列表、快速判断集合
const baseNameList = myArray1.map(item => item.name);
const baseNameSet = new Set(baseNameList);

// 2. 逐分组对齐
myArray2.forEach(group => {
  // 筛出当前分组下合法的已有条目,丢弃myArray1已移除的冗余项
  const validDetailMap = new Map();
  group.groupDetails.forEach(detail => {
    if (baseNameSet.has(detail.name)) {
      validDetailMap.set(detail.name, detail);
    }
  });

  // 按基准顺序重新生成groupDetails,缺失项补默认值
  group.groupDetails = baseNameList.map(name => {
    return validDetailMap.get(name) ?? {
      name,
      value1: 0,
      value2: 0
    };
  });
});

// 执行完成后myArray2即为题目要求的预期结果
逻辑特性
  • 自动处理删除:所有不在myArray1name集合里的冗余条目会被直接过滤,不需要单独写删除逻辑
  • 自动处理新增:基准集合里存在、分组内缺失的name会自动补全,value字段默认赋值0
  • 顺序对齐:最终groupDetails的条目顺序和myArray1的name顺序完全一致
  • 无侵入修改:已有条目的value1、value2原值会完整保留,不会被默认值覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:06:22