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

按Key对对象数组归并:合并同类型数据的实现方法

按type字段归并对象数组,合并同类型的value为数组

需求说明

给定如下结构的对象数组:

[{type: 'banana', value: 1}, {type: 'apple', value: 1}, {type: 'banana', value: 4}]

需要按type字段归并,将同一type对应的value整合为数组,最终得到:

[{type: 'banana', value: [1, 4]}, {type: 'apple', value: [1]}]

解决方案1:使用reduce方法

这是处理这类归并需求最常用的方式,利用reduce构建临时映射对象,最后提取值得到目标数组:

const originalData = [{type: 'banana', value: 1}, {type: 'apple', value: 1}, {type: 'banana', value: 4}];

const mergedData = Object.values(originalData.reduce((acc, current) => {
  // 如果当前type还没在映射中,初始化对应的结构
  if (!acc[current.type]) {
    acc[current.type] = { type: current.type, value: [] };
  }
  // 将当前value推入对应type的数组
  acc[current.type].value.push(current.value);
  return acc;
}, {}));

console.log(mergedData); // 输出目标结果

解决方案2:使用Map数据结构

如果更倾向于直观的键值对操作,可以用Map来存储每个type对应的对象:

const originalData = [{type: 'banana', value: 1}, {type: 'apple', value: 1}, {type: 'banana', value: 4}];

const typeMap = new Map();
originalData.forEach(item => {
  if (!typeMap.has(item.type)) {
    typeMap.set(item.type, { type: item.type, value: [] });
  }
  typeMap.get(item.type).value.push(item.value);
});

const mergedData = Array.from(typeMap.values());
console.log(mergedData); // 输出目标结果

两种方法都能实现需求,reduce写法更简洁,Map则对键值对的操作更直观,可根据习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:46:01