• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

211
Views
Lodash groupBy id de cada elemento de la matriz anidada de objetos

Tengo la siguiente entrada como ejemplo de clubs que incluye una propiedad de players que es una matriz de objetos.

Aporte

 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, }, ], }, ];

Quiero groupBy por cada uno de los player.userId s de cada club y debería tener un valor del club para cada jugador, para tener el siguiente resultado.

Salida deseada

 { '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] }], };

Yo he tratado

 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; }, {});

Pero devolvió el grupo por el clubId y un valor de cada jugador en el club

 { '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] }, ], };
about 3 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Reemplazar

 const id = player.clubId;

con

 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; }

about 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error