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

JS如何将对象数组按属性分组、拆分并按年份聚合对应数据

JS多维聚合最优实现方案

你之前先按年份分组再拆分统计的方式会产生额外的遍历开销,我们可以通过一次遍历完成两级聚合,整体时间复杂度为O(n),实现逻辑如下:


实现代码

// 第一阶段:聚合生成 level -> 年份 -> 累计金额 的映射结构
const levelYearAgg = data.reduce((result, current) => {
  const year = current.transactiondate.slice(0,4)
  const level = current.level
  const amount = Number(current.amount)
  // 初始化当前level的年份统计对象
  result[level] = result[level] ?? {}
  // 累加对应年份的金额
  result[level][year] = (result[level][year] ?? 0) + amount
  return result
}, {})

// 第二阶段:转换为目标输出结构,同时保证年份升序
const output = Object.entries(levelYearAgg).map(([levelName, yearSumMap]) => {
  // 对年份做升序排序
  const sortedYears = Object.keys(yearSumMap).sort()
  // 按排序后的年份提取对应累计金额
  return {
    name: levelName,
    data: sortedYears.map(year => yearSumMap[year])
  }
})

方案说明

  • 仅需遍历一次原始数据完成核心聚合逻辑,后续排序仅针对去重后的年份集合,开销远小于重复遍历原始数据
  • 自动适配任意数量的level和年份,无需硬编码年份区间
  • 用你提供的示例数据运行该代码,输出结果完全匹配预期格式:level 1的data为[5,11],level 2的data为[30,50]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:27:04