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

JS按id分组聚合month数据有没有更简洁的实现方式?

有更简洁的单行实现方案,用Array.reduce()就能实现,相比原方案两次遍历数组的写法,新方案只需要遍历一次,性能也更优。

实现代码

// 支持 ES2021+ 环境
const accumulator = data.reduce((acc, { id, month }) => ((acc[id] ??= []).push(month), acc), {});

说明

  • 以空对象{}作为reduce的初始累加值
  • 每次遍历解构出当前项的id和month属性,通过空值合并赋值运算符??=判断:如果累加对象中不存在对应id的属性,就先给它赋值为空数组
  • 将month推入对应数组后,返回累加对象进入下一轮遍历
  • 如果你需要兼容更低版本的JS运行环境,可以把??=替换为逻辑或赋值运算符||=,写法如下:
// 低版本兼容写法
const accumulator = data.reduce((acc, { id, month }) => ((acc[id] = acc[id] || []).push(month), acc), {});

运行后输出的结果和你原代码的输出完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:24:06