按groupId合并对象数组,构建含members字段的API目标数据结构
按groupId分组用户至目标API数据结构
我正在创建一个API,需要实现如下目标数据结构:Groups:[{ groupId, name, members:[{userId, first_name, last_name, joinedDate, leftDate}] }]
其中members字段需包含所有拥有相同groupId的用户。以下是输入数据及分组实现方案:
输入数据
[ { 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 } ]
分组实现方案
使用JavaScript的Array.reduce()方法完成分组逻辑,通过groupId维护分组映射,提取用户信息并归集到对应组的members数组中:
const input = [/* 上述输入数据 */]; const groupedGroups = Object.values(input.reduce((acc, item) => { // 初始化新分组结构 if (!acc[item.groupId]) { acc[item.groupId] = { groupId: item.groupId, name: item.name, members: [] }; } // 提取用户信息并加入对应组 const member = { userId: item.userId, first_name: item.first_name, last_name: item.last_name, joinedDate: item.joinedDate, leftDate: item.leftDate }; acc[item.groupId].members.push(member); return acc; }, {}));
最终输出结果
[ { groupId : 1, name : 'test group', members: [ { 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', 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 } ] } ]
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

