Otra pregunta sobre la función recursiva, no puedo entenderlos. Tengo una lista con grupos que pueden tener cualquier profundidad, un ejemplo:
{ Id: 1, Name:"Root", Children: [ { Id: 1, Name:"", Children: [ { Id: 1, Name:"", Children: [ { Id: 1, Name:"", Children: [] }, ] }, ] }, { Id: 2, Name:"", Children: [] }, { Id: 3, Name:"", Children: [] }, ] }Muestro estos grupos en un menú desplegable que el usuario puede seleccionar. Lo que debo hacer es cuando el usuario hace clic en cualquier grupo, debo mostrar todos los usuarios que forman parte de ese grupo Y sus subgrupos.
La información sobre qué usuarios pertenecen al grupo y sus subgrupos se mantiene en la lista de usuarios. Esa lista es plana y cada usuario tiene un accesorio que contiene una matriz de membresía.
He reescrito este método a continuación varias veces, esto es lo más cercano que tengo, pero esto más que duplica la longitud esperada porque obtengo duplicados.
const getAllUsersInGroup = (group, usersFiltered) => { if (!group.Children.length) return usersFiltered.flat(); return group.Children.flatMap((g) => { return getAllUsersInGroup( g, [...usersFiltered, users.filter((u) => u.Memberships.some((m) => m.GroupId === g.Id))] ); }); };Otra prueba devuelve casi todo, pero faltan usuarios en grupos más grandes con muchos subgrupos.
const getAllUsersInGroup = (group, userss) => { if (!group.Children.length) return [...userss].flat(); return group.Children.flatMap((g) => { return getAllUsersInGroup(g, users.filter((u) => u.Memberships.some((m) => m.GroupId === g.Id)), ); }); };Debo estar atascado en algún pensamiento equivocado o simplemente estúpido. Tal vez no necesite verificar la longitud de los niños y solo revisarlos todos, pero según tengo entendido, necesita alguna declaración que detenga el método.
¡Un poco de ayuda sería muy apreciada!
Saludos