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

如何合并JavaScript对象数组中的日期对象并按规则聚合数据?

解决方案:按日期聚合数据

原始数据(修正语法错误后)

const originalData = [
  {date: "2022-12-28T07:37:16.859Z", min: 2, zone: "zone A"},
  {date: "2022-12-28T07:38:13.859Z", min: 1, zone: "zone B"},
  {date: "2022-12-28T07:36:15.859Z", min: 3, zone: "zone C"},
  {date: "2022-12-31T07:37:16.859Z", min: 2, zone: "zone E"},
  {date: "2022-12-25T07:37:16.859Z", min: 4, zone: "zone D"}
];

实现代码

// 按日期分组聚合
const aggregatedData = Object.values(
  originalData.reduce((acc, item) => {
    // 以日期作为分组键
    const key = item.date;
    if (!acc[key]) {
      // 首次遇到该日期,初始化聚合对象
      acc[key] = {
        date: key,
        min: 0,
        zone: []
      };
    }
    // 累加min值
    acc[key].min += item.min;
    // 收集当前项的zone
    acc[key].zone.push(item.zone);
    return acc;
  }, {})
).map(item => ({
  ...item,
  // 将zone数组转为逗号分隔的字符串
  zone: item.zone.join(", ")
}));

console.log(aggregatedData);

逻辑说明

  1. 用reduce遍历原始数组,以date为键构建临时存储对象,实现按日期分组
  2. 首次遇到某日期时,初始化对应的聚合结构,包含日期、初始为0的min值、空zone数组
  3. 同日期的后续项,直接累加min值,并将zone存入数组
  4. 最后通过Object.values提取所有聚合结果,再用map把zone数组转为逗号分隔的字符串

最终处理结果

[
  {date: "2022-12-28T07:37:16.859Z", min: 6, zone: "zone A, zone B, zone C"},
  {date: "2022-12-31T07:37:16.859Z", min: 2, zone: "zone E"},
  {date: "2022-12-25T07:37:16.859Z", min: 4, zone: "zone D"}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:10:28