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

JavaScript中按唯一ID合并嵌套数组,处理动态键与dummy匹配规则

合并带唯一ID的对象数组并处理dummy字段

我是JavaScript初学者,需要合并一组包含唯一id的对象数组,需求如下:

  • A、B这类键是动态的,后续可能添加C、D等新键
  • dummy字段规则:仅当所有数组中对应id的dummy值完全匹配时,最终结果才保留该值,否则显示为-(连字符)

示例输入

let arr1 = [
  {
    A: 0.71,
    B: 0.52,
    id: 1,
    dummy: 1,
  },
  {
    A: 0.72,
    B: 0.50,
    id: 2,
    dummy: 1,
  },
];

let arr2 = [
  {
    A: 0.157,
    B: 0.02255,
    id: 1,
    dummy: 1,
  },
  {
    A: 0.16761,
    B: 0.028281,
    id: 2,
    dummy: 1,
  },
];

let arr3 = [
  {
    A: 0.55,
    B: 0.50,
    id: 1,
    dummy: 1,
  },
  {
    A: 0.5,
    B: 0.43,
    id: 2,
    dummy: 1,
  },
];

期望输出

let finalArr = [
  {
    id: 1,
    dummy: 1,
    arr1_A: 0.71,
    arr1_B: 0.52,
    arr2_A: 0.157,
    arr2_B: 0.02255,
    arr3_A: 0.55,
    arr3_B: 0.5,
  },
  {
    id: 2,
    dummy: 1,
    arr1_A: 0.72,
    arr1_B: 0.5,
    arr2_A: 0.16761,
    arr2_B: 0.028281,
    arr3_A: 0.5,
    arr3_B: 0.43,
  },
];

实现代码

下面是针对需求的实现代码,注释说明了每一步的作用:

// 把所有输入数组和对应的名称存到一个数组里,方便批量处理
const arrays = [
  { name: 'arr1', data: arr1 },
  { name: 'arr2', data: arr2 },
  { name: 'arr3', data: arr3 }
];

// 用对象按id分组存储数据,同一id的所有数据会被整合到一起
const groupedData = {};

// 遍历每个输入数组
arrays.forEach(({ name, data }) => {
  // 遍历数组内的每个对象
  data.forEach(item => {
    const { id, dummy, ...dynamicKeys } = item;
    // 如果当前id未被初始化,先创建基础结构
    if (!groupedData[id]) {
      groupedData[id] = { id, dummyValues: [] };
    }
    // 收集当前id对应的所有dummy值,用于后续判断是否一致
    groupedData[id].dummyValues.push(dummy);
    // 遍历动态键(A、B等),重命名为「数组名_键名」的格式并存入
    Object.entries(dynamicKeys).forEach(([key, value]) => {
      groupedData[id][`${name}_${key}`] = value;
    });
  });
});

// 将分组后的对象转为数组,同时处理dummy字段的规则
const finalArr = Object.values(groupedData).map(item => {
  const { dummyValues, ...rest } = item;
  // 判断所有dummy值是否完全一致
  const allDummyMatch = dummyValues.every(val => val === dummyValues[0]);
  return {
    ...rest,
    dummy: allDummyMatch ? dummyValues[0] : '-'
  };
});

console.log(finalArr);

代码说明

  1. 分组整合:通过对象按id分组,把同一id的所有数据集中,避免重复处理
  2. 动态键处理:用Object.entries遍历非id、非dummy的字段,自动适配后续新增的C、D等键
  3. dummy字段校验:用every方法判断同一id的所有dummy值是否相同,按规则设置最终值
  4. 格式转换:最后把分组对象转为数组,得到符合要求的结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:40:33