angular - Cómo usar la clave de agrupamiento en GroupBy en RxJS,
Tengo una estructura devuelta por la API
Esto es una firma
methodApi(): Observable(Array<MyClass>)
Esto es datos
{ id: 1, name: 'Red', parentId: null }
{ id: 2, name: 'Apple', parentId: 1 }
others
Quiero agruparlo por parentId
methodApi()
.pipe(groupby((x: MyClass[] => ...))) // THERE
.subscribe(x => console.log(x));
MethodApi retorna Observable<Array>, en el método 'groupby' como parámetro de entrada tengo un array, por lo que no puedo referirme a la propiedad parentId. Cuando cambio el parámetro de entrada a MyClass entonces obtengo un error de compilación.
¿Cómo resolver este agrupamiento? Uso Angular 9.0 con RxJS 6.5.5
Respuesta #1
Tendrás que crear otro flujo observable a partir de tu arreglo usando from, y luego usar groupBy y después convertirlo de nuevo a un arreglo de resultados:
methodApi().pipe(
concatMap((result) => from(result)),
groupBy((item) => item.parentId),
mergeMap(group => group.pipe(toArray()))
).subscribe(x => console.log(x));
pila de ejemplo
También puedes usar mergeAll:
methodApi().pipe(
mergeAll(),
groupBy((item) => item.parentId),
mergeMap(group => group.pipe(toArray()))
).subscribe(x => console.log(x));
pila de ejemplo
Respuesta #2
Debería ser simple usando el operador groupBy como se muestra a continuación,
methodApi().pipe(
groupBy((item) => item.parentId),
mergeMap(group => group.pipe(toArray()))
).subscribe(console.log) // should get you an array with groupBy parentId
