Tengo una matriz multidimensional de objetos que contienen usuarios sugeridos. Nuevamente, cada usuario sugerido tiene algunos usuarios sugeridos y así sucesivamente.
En la aplicación que estoy creando, selecciono un usuario (llamémoslo 'Steve') y me gustaría recibir una cierta cantidad de usuarios conectados a ese usuario (recuperando las sugerencias). Todos los datos están ahí, solo necesito encontrar una manera significativa de iterar esto.
Para simplificar, he creado una matriz con algunos datos de muestra donde cada usuario tiene dos usuarios sugeridos:
// Suggested users of my initially selected user (Steve) let suggested_users_based_on_steve = [ { name: 'A', suggested: [ { name: 'A1', suggested: [ { name: 'A1A1' }, { name: 'A1A2' } ] }, { name: 'A2', suggested: [ { name: 'A2A1' }, { name: 'A2A2' } ] } ] }, { name: 'B', suggested: [ { name: 'B1', suggested: [ { name: 'B1B1' }, { name: 'B1B2' } ] }, { name: 'B2', suggested: [ { name: 'B2B1' }, { name: 'B2B2' } ] } ] } ];Tenga en cuenta que la cantidad de usuarios sugeridos no es fija. Cada usuario puede tener una cantidad ilimitada de usuarios sugeridos. Además, es importante iterar de una capa a otra para obtener los "mejores" y más conectados resultados/usuarios. El usuario inicial está más conectado con A y B que con A1A1 y A1A2.
Estoy luchando por encontrar la combinación correcta de bucles for...of anidados. ¿Hay alguna forma recomendada de hacer esto?
¡Gracias de antemano!
let suggested_users_based_on_steve = [ { name: 'A', suggested: [ { name: 'A1', suggested: [ { name: 'A1A1' }, { name: 'A1A2' } ] }, { name: 'A2', suggested: [ { name: 'A2A1' }, { name: 'A2A2' } ] } ] }, { name: 'B', suggested: [ { name: 'B1', suggested: [ { name: 'B1B1' }, { name: 'B1B2' } ] }, { name: 'B2', suggested: [ { name: 'B2B1' }, { name: 'B2B2' } ] } ] } ]; function test(arr, result = []) { for (let user of arr.values()) { result.push(user); if (result.length === 7) return result; } var next = arr.reduce(function (all, user) { return all.concat(user.suggested || []); }, []); if (next.length === 0) return result; return test(next, result); } test(suggested_users_based_on_steve);