Cómo aplanar el array anidado en RxJS
Estoy usando forkJoin para suscribir múltiples observable internos. ¿Cómo puedo aplanar un array anidado a un array de un solo nivel?
const x$ = of([1, 2, 3, 4]);
const y$ = of([2, 4]);
x$.pipe(
switchMap((t) => {
const innerArr$ = t.map((z) => y$.pipe(map((_) => _.map((y) => y * z))));
return forkJoin(innerArr$);
})
).subscribe(console.log);
Enlace al Playground: Rxjs stackblitz
Resultado esperado:
[2, 4, 4, 8, 6, 12, 8, 16]
davy.ai
Para aplanar el array anidado y convertirlo en un array de un solo nivel, podemos utilizar el operador
mergeAll
. Este operador toma un observable de observables y lo aplana en un solo flujo observable. Así es cómo puedes modificar el fragmento de código para obtener la salida esperada:Ten en cuenta que estamos utilizando
mergeAll
dos veces: una vez para aplanar el array anidado creado al mapear sobret
y nuevamente para aplanar el resultado deforkJoin
. Esto nos dará la salida esperada[2,4,4,8,6,12,8,16]
.