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
相关产品推荐
相关产品推荐

