javascript 按键合并具有相同值的对象数组[duplicate]

uinbv5nw  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(114)

此问题在此处已有答案

How to group a javascript object array by multiple of its properties?(2个答案)
7小时前关闭。
请帮助。我正在创建一个API,这是我试图实现的数据结构:

  • 组:[{组ID,名称,成员:[{用户ID,名字,姓氏,加入日期,离开日期}] }]* 成员字段应包含具有相同组ID的所有用户我需要按组ID对此输入进行分组:
[ { groupId    : 1
  , name       : 'test group'
  , userId     : 2
  , first_name : 'Ross'
  , last_name  : 'Geller'
  , joinedDate : 2022-01-13T13: 25: 43.510Z
  , leftDate   : 2023-02-24T19: 07: 11.110Z
  } 
, { groupId    : 12
  , name       : 'test group 2'
  , userId     : 2
  , first_name : 'Ross'
  , last_name  : 'Geller'
  , joinedDate : 2022-01-13T00: 00: 00.000Z
  , leftDate   : null
  } 
, { groupId    : 12
  , name       : 'test group 2'
  , userId     : 6
  , first_name : 'Joey'
  , last_name  : 'Tribbiani'
  , joinedDate : 2022-01-13T00: 00: 00.000Z
  , leftDate   : null
  } 
]

输入此输出:

[ { groupId : 1
  , name    : 'test group'
  , members: 
    [ { userId     : 5
      , first_name : 'Monica'
      , last_name  : 'Gellar'
      , joinedDate : 2022-01-13T13: 25: 43.510Z
      , leftDate   : null
  } ] } 
, { groupId : 12
  , name    : 'test group 2'
  , members: 
    [ { userId     : 2
      , first_name : 'Ross'
      , last_name  : 'Geller'
      , joinedDate : 2022-01-13T00: 00: 00.000Z
      , leftDate   : null
      } 
    , { userId     : 6
      , first_name : 'Joey'
      , last_name  : 'Tribbiani'
      , joinedDate : 2022-01-13T00: 00: 00.000Z
      , leftDate   : null
} ] } ]
7nbnzgx9

7nbnzgx91#

您可以使用Array.prototype.reduce

const members = [
  {
    groupId: 1,
    name: 'test group',
    userId: 2,
    first_name: 'Ross',
    last_name: 'Geller',
    joinedDate: "2022-01-13T13:25:43.510Z",
    leftDate: "2023-02-24T19:07:11.110Z"   
  },
  {
    groupId: 12,
    name: 'test group 2',
    userId: 2,
    first_name: 'Ross',
    last_name: 'Geller',
    joinedDate: "2022-01-13T00:00:00.000Z",
    leftDate: null
  },
  {
    groupId: 12,
    name: 'test group 2',
    userId: 6,
    first_name: 'Joey',
    last_name: 'Tribbiani',
    joinedDate: "2022-01-13T00:00:00.000Z",
    leftDate: null
  }
];

const grouped = members.reduce((acc, { groupId, name, ...member }) => {
  const existingGroup = acc.find(group => group.groupId === groupId);
  if (existingGroup)
    existingGroup.members.push(member);
  else
    acc.push({
      groupId,
      name,
      members: [
        member
      ]
    });
  return acc;
}, []);

console.log(grouped);

相关问题