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

JavaScript:将重复对象值转换为数组的方法求助

合并数组中重复字段的对象,将value转换为数组

嘿,我懂你找了好几个小时的痛苦!你想要的是把数组里那些共享相同标识字段的对象合并,把各自的value打包成一个数组对吧?用JavaScript的reduce方法就能轻松实现,这是处理这类分组合并需求的标准操作,我给你写个具体的实现:

实现代码

const originalArray = [
  { "value": "foo01", "Diagnosis_Code": "Tidak ada", "name": "bar" },
  { "value": "foo02", "Diagnosis_Code": "Tidak ada", "name": "bar" },
  { "value": "foo03", "Diagnosis_Code": "Tidak ada", "name": "bar" },
  { "value": "foo04", "Diagnosis_Code": "Tidak ada", "name": "bar" },
  { "value": "val1", "Diagnosis_Code": "foo03", "name": "bar2" },
  { "value": "val2", "Diagnosis_Code": "foo01", "name": "bar2" },
  { "value": "val3", "Diagnosis_Code": "..." }
];

// 核心逻辑:分组合并
const mergedArray = Object.values(
  originalArray.reduce((grouped, item) => {
    // 用name + Diagnosis_Code作为分组唯一标识,确保相同组合的对象被合并
    const groupKey = `${item.name || 'no-name'}-${item.Diagnosis_Code}`;
    
    if (grouped[groupKey]) {
      // 已存在该分组,把当前value加入数组
      grouped[groupKey].value.push(item.value);
    } else {
      // 新分组,把value包装成数组后存入
      grouped[groupKey] = {
        ...item,
        value: [item.value]
      };
    }
    
    return grouped;
  }, {})
);

console.log(mergedArray);

代码说明

  • 分组依据:这里用name和Diagnosis_Code的组合作为分组key,确保只有这两个字段完全相同的对象才会被合并。如果你的分组规则不同(比如只按name分组),只需要修改groupKey的生成逻辑就行。
  • 处理边界情况:我加了item.name || 'no-name'来兼容最后一个没有name字段的对象,避免出现undefined导致的key异常。
  • 最终输出:用Object.values()把分组对象转换成数组,得到我们想要的结构。

输出结果

运行后你会得到这样的合并数组:

[
  { "value": ["foo01", "foo02", "foo03", "foo04"], "Diagnosis_Code": "Tidak ada", "name": "bar" },
  { "value": ["val1"], "Diagnosis_Code": "foo03", "name": "bar2" },
  { "value": ["val2"], "Diagnosis_Code": "foo01", "name": "bar2" },
  { "value": ["val3"], "Diagnosis_Code": "..." }
]

如果还有其他调整需求(比如合并其他字段),随时告诉我就行!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:07:23