Reputation: 123
I am doing a simple http call and getting an array of objects
getFruit():Observable<Fruit[]> {
return this.http.get<Fruit[]>(URL);
}
the fruit object is
export class Fruit {
public name: string;
public color: string;
}
the problem code is below when i try to group or do anything in the pipe:
fruitService.getFruit().pipe(
groupBy(f => f.color),
mergeMap(group => group.pipe(toArray()))
);
however when i try to use rxjs groupBy i get errors;
Property 'color' does not exist on type 'Fruit[]'
Upvotes: 0
Views: 37
Reputation: 8121
groupBy
acts on each emitted value, when you use http client it will emit one value, an array, and the array it self, does not have a color property
If you wish to group results by color you only need to map it just as you would with any array.
One way to do it would be using Array.reduce
, something like:
this.fruits$ = this.fruitService.getFruit().pipe(
map(fruits => {
const key = 'color';
return fruits.reduce((allFruits, fruit) => {
(allFruits[fruit[key]] = allFruits[fruit[key]] || []).push(fruit);
return allFruits;
}, {});
})
)
*copied reduce implementation from here
Upvotes: 1