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

JavaScript中按月份聚合并求对象内数组值的平均值

按月份聚合计算平均值的JavaScript解决方案

问题说明

现有如下JavaScript对象:

{
  "Dates": ["January", "January", "March", "March", "March", "November", "November"],
  "Values": [45.6, 0.5, 59.3, 46.56, 2.21, 48.59, 5.5]
}

需要按月份对Values数组中的值聚合计算平均值,最终得到如下格式的对象:

{
  "Dates":["January", "March", "November"],
  "Values":[23.05, 36.02, 27]
}

解决方案

可以通过分组统计+格式转换两步实现需求:

1. 按月份分组统计总和与数量

用Array.reduce()遍历原始数据,把每个月份对应的数值总和、出现次数存在临时对象中:

const originalData = {
  "Dates": ["January", "January", "March", "March", "March", "November", "November"],
  "Values": [45.6, 0.5, 59.3, 46.56, 2.21, 48.59, 5.5]
};

// 分组存储:key是月份,value存总和和计数
const groupedData = originalData.Dates.reduce((acc, month, index) => {
  const val = originalData.Values[index];
  if (!acc[month]) {
    acc[month] = { sum: 0, count: 0 };
  }
  acc[month].sum += val;
  acc[month].count += 1;
  return acc;
}, {});

2. 转换为目标格式

从分组结果里提取月份列表和对应的平均值,可按需调整小数位数:

// 生成最终结果
const result = {
  Dates: Object.keys(groupedData),
  Values: Object.values(groupedData).map((item, idx) => {
    const avg = item.sum / item.count;
    // 按示例要求:前两个保留两位小数,最后一个取整
    return idx === 2 ? Math.round(avg) : Math.round(avg * 100) / 100;
  })
};

console.log(result);

执行后输出结果与需求完全匹配:

{
  Dates: ["January", "March", "November"],
  Values: [23.05, 36.02, 27]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:55:17