如何基于公共字段Month合并对象数组?
按Month字段合并对象数组的简洁实现
需求说明
现有如下对象数组:
[ { "Net_Amount": 499, "Date": "2022-01-09T18:30:00.000Z", "Scheme_Name": "CUSTOMERWINBACKJCA01", "Month": "Jan" }, { "Net_Amount": 902, "Date": "2022-01-09T18:30:00.000Z", "Scheme_Name": "CUSTOMERWINBACKJCA02", "Month": "Jan" }, { "Net_Amount": 1860, "Date": "2022-10-01T18:30:00.000Z", "Scheme_Name": "CUSTOMERCONNECTJCA", "Month": "Oct" }, { "Net_Amount": 1889, "Date": "2022-11-01T18:30:00.000Z", "Scheme_Name": "CUSTOMERCONNECTJCA", "Month": "Nov" } ]
需要基于Month字段合并对象,最终格式如下:
[ { "Month": "Jan", "varData": [ { "Net_Amount": 499, "Date": "2022-01-09T18:30:00.000Z", "Scheme_Name": "CUSTOMERWINBACKJCA01" }, { "Net_Amount": 902, "Date": "2022-01-09T18:30:00.000Z", "Scheme_Name": "CUSTOMERWINBACKJCA02" } ] }, { "Month": "Oct", "varData": [ { "Net_Amount": 1860, "Date": "2022-10-01T18:30:00.000Z", "Scheme_Name": "CUSTOMERCONNECTJCA" } ] }, { "Month": "Nov", "varData": [ { "Net_Amount": 1889, "Date": "2022-11-01T18:30:00.000Z", "Scheme_Name": "CUSTOMERCONNECTJCA" } ] } ]
无需手动遍历判断,可通过JavaScript内置的Array.prototype.reduce()方法快速实现分组合并。
实现代码
const originalArray = [/* 原始数组内容 */]; const mergedArray = Object.values( originalArray.reduce((acc, { Month, ...rest }) => { if (!acc[Month]) { acc[Month] = { Month, varData: [] }; } acc[Month].varData.push(rest); return acc; }, {}) ); console.log(mergedArray);
代码说明
reduce遍历分组:reduce接收一个累加器对象acc,遍历原始数组的每个元素,用解构语法分离出Month字段和剩余属性rest。- 创建分组对象:如果累加器中不存在当前
Month对应的键,就初始化一个包含Month和空varData数组的对象。 - 收集同组数据:将当前元素的剩余属性
rest推入对应分组的varData数组。 - 转为目标数组:用
Object.values()将累加器对象的所有值提取为数组,得到最终的合并结果。
内容的提问来源于stack exchange,提问作者user20933891
相关产品推荐
相关产品推荐

