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

如何按需求聚合JSON数据?(JavaScript实现)

问题解决:API响应数据聚合处理

原始API响应数据

[
  {
    sumTime: "2024-04-25 12:00:00",
    equipParaName: "P1",
    sumValue: 5
  },
  {
    sumTime: "2024-04-25 05:00:00",
    equipParaName: "P2",
    sumValue: 10
  },
  {
    sumTime: "2024-04-25 09:00:00",
    equipParaName: "P1",
    sumValue: 8
  },
  {
    sumTime: "2024-04-25 08:00:00",
    equipParaName: "P2",
    sumValue: 3
  },
  {
    sumTime: "2024-04-25 08:00:00",
    equipParaName: "P3",
    sumValue: 12
  }
]

聚合规则

  • 同一sumTime下,equipParaName不可重复(原始数据已满足该条件)
  • 结果中单个对象最多包含所有唯一equipParaName对应的属性(本例为P1、P2、P3)
  • 同一equipParaName的数据需按sumTime升序排列,依次填入结果列表的对应位置(时间早的在前序对象)

期望输出

[
  {
    index: 1,
    P1: 8,
    P1_sumTime: "2024-04-25 09:00:00",
    P2: 10,
    P2_sumTime: "2024-04-25 05:00:00",
    P3: 12,
    P3_sumTime: "2024-04-25 08:00:00"
  },
  {
    index: 2,
    P1: 5,
    P1_sumTime: "2024-04-25 12:00:00",
    P2: 3,
    P2_sumTime: "2024-04-25 08:00:00"
  }
]

JavaScript实现代码

function aggregateData(rawData) {
  // 按equipParaName分组,并对每组按sumTime升序排序
  const grouped = rawData.reduce((acc, item) => {
    if (!acc[item.equipParaName]) {
      acc[item.equipParaName] = [];
    }
    acc[item.equipParaName].push(item);
    return acc;
  }, {});

  // 对每个分组按时间升序排序
  Object.values(grouped).forEach(group => {
    group.sort((a, b) => new Date(a.sumTime) - new Date(b.sumTime));
  });

  // 确定结果数组的长度(取最长分组的条目数)
  const maxLength = Math.max(...Object.values(grouped).map(g => g.length));

  // 构建最终结果数组
  const result = [];
  for (let i = 0; i < maxLength; i++) {
    const obj = { index: i + 1 };
    // 遍历每个参数名,填充对应位置的数据
    Object.entries(grouped).forEach(([paraName, items]) => {
      const item = items[i];
      if (item) {
        obj[paraName] = item.sumValue;
        obj[`${paraName}_sumTime`] = item.sumTime;
      }
    });
    result.push(obj);
  }

  return result;
}

// 测试调用
const rawData = [
  { sumTime: "2024-04-25 12:00:00", equipParaName: "P1", sumValue: 5 },
  { sumTime: "2024-04-25 05:00:00", equipParaName: "P2", sumValue: 10 },
  { sumTime: "2024-04-25 09:00:00", equipParaName: "P1", sumValue: 8 },
  { sumTime: "2024-04-25 08:00:00", equipParaName: "P2", sumValue: 3 },
  { sumTime: "2024-04-25 08:00:00", equipParaName: "P3", sumValue: 12 }
];

console.log(JSON.stringify(aggregateData(rawData), null, 2));

内容的提问来源于stack exchange,提问作者Sao Bui Van

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:53:15