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

如何基于公共字段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);

代码说明

  1. reduce遍历分组:reduce接收一个累加器对象acc,遍历原始数组的每个元素,用解构语法分离出Month字段和剩余属性rest。
  2. 创建分组对象:如果累加器中不存在当前Month对应的键,就初始化一个包含Month和空varData数组的对象。
  3. 收集同组数据:将当前元素的剩余属性rest推入对应分组的varData数组。
  4. 转为目标数组:用Object.values()将累加器对象的所有值提取为数组,得到最终的合并结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:01:10