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

