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

如何在JavaScript中计算多组对象数组的y值平均值

JavaScript 计算多组时间序列数据的平均值

需求说明

处理动态数量的对象数组(示例为2组,实际可支持更多),将每组data数组中相同x(日期)对应的y值求和后除以数组组数,得到平均值,最终生成一个id为average的结果对象。

输入数据示例

{
  "result": [
    {
      "id": "ioimall",
      "color": "hsla(147, 47%, 55%, 1)",
      "data": [
        {"x": "2023-04-01", "y": 13.3202},
        {"x": "2023-04-02", "y": 11.8434},
        {"x": "2023-04-03", "y": 17.2365},
        {"x": "2023-04-04", "y": 13.2256},
        {"x": "2023-04-05", "y": 23.9547},
        {"x": "2023-04-06", "y": 17.1793},
        {"x": "2023-04-07", "y": 15.776},
        {"x": "2023-04-08", "y": 11.3356},
        {"x": "2023-04-09", "y": 6.6018},
        {"x": "2023-04-10", "y": 4.3196},
        {"x": "2023-04-11", "y": 4.8547},
        {"x": "2023-04-12", "y": 4.1935},
        {"x": "2023-04-13", "y": 4.6628},
        {"x": "2023-04-14", "y": 5.9717},
        {"x": "2023-04-15", "y": 3.8766},
        {"x": "2023-04-16", "y": 3.6379},
        {"x": "2023-04-17", "y": 4.7511},
        {"x": "2023-04-18", "y": 5.2891},
        {"x": "2023-04-19", "y": 4.7904},
        {"x": "2023-04-20", "y": 7.5441},
        {"x": "2023-04-21", "y": 191.0336},
        {"x": "2023-04-22", "y": 0},
        {"x": "2023-04-23", "y": 0},
        {"x": "2023-04-24", "y": 0},
        {"x": "2023-04-25", "y": 0},
        {"x": "2023-04-26", "y": 0},
        {"x": "2023-04-27", "y": 0},
        {"x": "2023-04-28", "y": 0},
        {"x": "2023-04-29", "y": 0},
        {"x": "2023-04-30", "y": 0}
      ]
    },
    {
      "id": "mytown",
      "color": "hsla(221, 79%, 74%, 1)",
      "data": [
        {"x": "2023-04-01", "y": 4.8123},
        {"x": "2023-04-02", "y": 5.5642},
        {"x": "2023-04-03", "y": 5.2656},
        {"x": "2023-04-04", "y": 8.7167},
        {"x": "2023-04-05", "y": 5.3078},
        {"x": "2023-04-06", "y": 4.7283},
        {"x": "2023-04-07", "y": 4.1322},
        {"x": "2023-04-08", "y": 5.1783},
        {"x": "2023-04-09", "y": 5.2504},
        {"x": "2023-04-10", "y": 6.7794},
        {"x": "2023-04-11", "y": 5.0806},
        {"x": "2023-04-12", "y": 4.9803},
        {"x": "2023-04-13", "y": 4.3914},
        {"x": "2023-04-14", "y": 5.4071},
        {"x": "2023-04-15", "y": 4.939},
        {"x": "2023-04-16", "y": 4.4732},
        {"x": "2023-04-17", "y": 5.0562},
        {"x": "2023-04-18", "y": 5.0911},
        {"x": "2023-04-19", "y": 4.8266},
        {"x": "2023-04-20", "y": 23.4864},
        {"x": "2023-04-21", "y": 1185.7143},
        {"x": "2023-04-22", "y": 0},
        {"x": "2023-04-23", "y": 0},
        {"x": "2023-04-24", "y": 0},
        {"x": "2023-04-25", "y": 0},
        {"x": "2023-04-26", "y": 0},
        {"x": "2023-04-27", "y": 0},
        {"x": "2023-04-28", "y": 0},
        {"x": "2023-04-29", "y": 0},
        {"x": "2023-04-30", "y": 0}
      ]
    }
  ]
}

实现代码

function calculateAverage(dataGroups) {
  const groupCount = dataGroups.length;
  if (groupCount === 0) return [];

  // 存储每个x对应的y值总和
  const sumMap = new Map();

  // 遍历所有组,累加每个x的y值总和
  dataGroups.forEach(group => {
    group.data.forEach(item => {
      sumMap.set(item.x, (sumMap.get(item.x) || 0) + item.y);
    });
  });

  // 转换为排序后的数组,保持日期顺序,计算平均值并保留两位小数
  const averageData = Array.from(sumMap.entries())
    .sort((a, b) => new Date(a[0]) - new Date(b[0]))
    .map(([x, total]) => ({
      x,
      y: parseFloat((total / groupCount).toFixed(2))
    }));

  // 返回目标结构
  return [
    {
      id: "average",
      color: "hsla(147, 47%, 55%, 1)",
      data: averageData
    }
  ];
}

// 使用示例
const inputData = { /* 上述输入数据 */ };
const result = { result: calculateAverage(inputData.result) };
console.log(JSON.stringify(result, null, 2));

输出结果示例

{
  "result": [
    {
      "id": "average",
      "color": "hsla(147, 47%, 55%, 1)",
      "data": [
        {"x": "2023-04-01", "y": 9.06},
        {"x": "2023-04-02", "y": 8.70},
        {"x": "2023-04-03", "y": 11.25},
        {"x": "2023-04-04", "y": 10.97},
        {"x": "2023-04-05", "y": 14.63},
        {"x": "2023-04-06", "y": 10.95},
        {"x": "2023-04-07", "y": 9.95},
        {"x": "2023-04-08", "y": 8.25},
        {"x": "2023-04-09", "y": 5.92},
        {"x": "2023-04-10", "y": 5.54},
        {"x": "2023-04-11", "y": 4.96},
        {"x": "2023-04-12", "y": 4.58},
        {"x": "2023-04-13", "y": 4.52},
        {"x": "2023-04-14", "y": 5.68},
        {"x": "2023-04-15", "y": 4.40},
        {"x": "2023-04-16", "y": 4.05},
        {"x": "2023-04-17", "y": 4.90},
        {"x": "2023-04-18", "y": 5.19},
        {"x": "2023-04-19", "y": 4.80},
        {"x": "2023-04-20", "y": 15.51},
        {"x": "2023-04-21", "y": 688.37},
        {"x": "2023-04-22", "y": 0},
        {"x": "2023-04-23", "y": 0},
        {"x": "2023-04-24", "y": 0},
        {"x": "2023-04-25", "y": 0},
        {"x": "2023-04-26", "y": 0},
        {"x": "2023-04-27", "y": 0},
        {"x": "2023-04-28", "y": 0},
        {"x": "2023-04-29", "y": 0},
        {"x": "2023-04-30", "y": 0}
      ]
    }
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:27:05