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

如何正确对JS对象数组按字段分组聚合得到指定格式的结果数组

实现方案

可以用Array.prototype.reduce完成分组聚合,实现代码如下:

const arrayPat = [
    {pat: '111', res: 'qwe', tag: '1'},
    {pat: '111', res: 'sda', tag: '2'},
    {pat: '111', res: 'xzc', tag: '3'},
    {pat: '111', res: 'cej', tag: '4'},
    {pat: '222', res: 'qwd', tag: '5'},
    {pat: '222', res: 'asd', tag: '6'},
]

// 分组聚合逻辑
const groupMap = arrayPat.reduce((acc, curr) => {
  // 首次遇到对应pat时初始化分组,tag取组内第一个元素的值
  if (!acc[curr.pat]) {
    acc[curr.pat] = {
      pat: curr.pat,
      res: [],
      tag: curr.tag
    }
  }
  // 把当前元素的res值推入对应分组的res数组
  acc[curr.pat].res.push(curr.res)
  return acc
}, {})

// 将分组映射的value提取为数组即为最终结果
const resultArray = Object.values(groupMap)

运行后resultArray的正确输出为:

[
  { pat: '111', res: [ 'qwe', 'sda', 'xzc', 'cej' ], tag: '1' },
  { pat: '222', res: [ 'qwd', 'asd' ], tag: '5' }
]

注:你给出的示例结果存在两处笔误:pat为222对应的res数组第一个元素应为qwd而非qwe,tag应为组内第一个元素的5而非1,上述代码输出是符合需求描述的正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:54:08