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

JS如何按指定字段分组对象数组为分块列表且不修改reduce入参

你当前的实现是直接修改reduce的累加器对象,且最终得到的是按type为key的对象,还需要再转成你期望的数组结构。以下是不修改入参的实现方案:

方案1:无副作用的reduce实现

每次迭代都返回全新的累加器对象,完全不修改入参:

const groupedMap = data.reduce((acc, item) => {
  return {
    ...acc,
    [item.type]: [...(acc[item.type] || []), item]
  }
}, {})

// 转换为你需要的数组输出格式
const res = Object.entries(groupedMap).map(([type, data]) => ({
  type,
  data
}))

方案2:普通遍历实现(逻辑更直观)

如果觉得reduce的写法不够好理解,可以用普通循环实现:

const groupMap = {}
for (const item of data) {
  if (!groupMap[item.type]) {
    groupMap[item.type] = []
  }
  // 若需要完全不影响原数据中的对象,可改为 push({...item}) 做浅拷贝
  groupMap[item.type].push(item)
}

const res = Object.entries(groupMap).map(([type, data]) => ({
  type,
  data
}))

两种方案最终输出的res都完全符合你给出的预期格式,且不会修改reduce入参或者原数组数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:18:01