[英]Lodash groupBy id of each item of nested array of object
我有以下输入作为clubs
的示例,其中包括一个属性players
,它是一个对象数组。
const clubs = [
{
id: 5,
name: 'Club Name',
creatorId: 10,
players: [
{
userId: 2, // group by this property
name: 'Player name 1',
clubId: 5,
},
{
userId: 7, // group by this property
name: 'Player name 2',
clubId: 5,
},
],
},
{
id: 6,
name: 'Club Name 2',
creatorId: 2,
players: [
{
userId: 7, // group by this property
name: 'Player name 3',
clubId: 6,
},
{
userId: 8, // group by this property
name: 'Player name 4',
clubId: 6,
},
{
userId: 22, // group by this property
name: 'Player name 5',
clubId: 6,
},
],
},
];
我想对每个俱乐部的每个groupBy
进行player.userId
,并且应该为每个球员有一个俱乐部的值,以获得以下 output。
{
'2': [{ id: 5, name: 'Club Name', creatorId: 10, players: [Array] }],
'7': [
{ id: 5, name: 'Club Name', creatorId: 10, players: [Array] },
{ id: 6, name: 'Club Name 2', creatorId: 2, players: [Array] },
],
'8': [{ id: 6, name: 'Club Name 2', creatorId: 2, players: [Array] }],
'22': [{ id: 6, name: 'Club Name 2', creatorId: 2, players: [Array] }],
};
我努力了
const byPlayer = allClubs.reduce((b, a) => {
a.players.forEach((player) => {
const id = player.clubId;
const clubsByPlayer = b[id] || (b[id] = []);
clubsByPlayer.push(a);
});
return b;
}, {});
但它通过clubId
和俱乐部中每个玩家的值返回组
{
'5': [
{ id: 5, name: 'Club Name', creatorId: 10, players: [Array] },
{ id: 5, name: 'Club Name', creatorId: 10, players: [Array] },
],
'6': [
{ id: 6, name: 'Club Name 2', creatorId: 2, players: [Array] },
{ id: 6, name: 'Club Name 2', creatorId: 2, players: [Array] },
{ id: 6, name: 'Club Name 2', creatorId: 2, players: [Array] },
],
};
代替
const id = player.clubId;
和
const id = player.userId;
const clubs = [{ id: 5, name: 'Club Name', creatorId: 10, players: [{ userId: 2, name: 'Player name 1', clubId: 5 }, { userId: 7, name: 'Player name 2', clubId: 5 }] }, { id: 6, name: 'Club Name 2', creatorId: 2, players: [{ userId: 7, name: 'Player name 3', clubId: 6 }, { userId: 8, name: 'Player name 4', clubId: 6 }, { userId: 22, name: 'Player name 5', clubId: 6 }] }], byPlayer = clubs.reduce((b, a) => { a.players.forEach((player) => { (b[player.userId]??= []).push(a); }); return b; }, {}); console.log(byPlayer)
.as-console-wrapper { max-height: 100%;important: top; 0; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.