Im requesting a web service and receiving an observable and loop them to build another array of objects like below.
export interface Seller {
email?:String;
isOnline?:boolean;
name?:String;
}
Angular Component :
sellers: Observable<Seller[]>;
constructor(firestore: AngularFirestore) {
this.sellers = firestore.collection('sellers').valueChanges();
}
getSllers(){
return this.sellers;
}
Using these sellers Observable im creating an array of objects.
getSellerDetails() {
return this.getSllers().pipe(
map(sellers => {
sellers.filter(seller => seller.isOnline == true)
return sellers.map(seller => {
return {
name: seller.name,
isOnline: seller.isOnline,
email: seller.email
}
});
}));
}
And here i want to filter out the sellers only who are having isOnline true. The snippet im having seems not working. What would be the best approach?
getSellerDetails() {
return this.getSllers().pipe(
// Filter only sellers that isOnline
map(sellers => sellers.filter(seller => seller.isOnline == true)),
// Map all filtered sellers to the wanted interface
map(sellers => {
return sellers.map(seller => {
return {
name: seller.name,
isOnline: seller.isOnline,
email: seller.email
}
});
})
)
}
Also can be simplify with:
getSellerDetails() {
return this.getSllers().pipe(
// Filter only sellers that isOnline
map((sellers) => sellers.filter((s) => s.isOnline)),
// Map all filtered sellers to the wanted interface
map((sellers) => sellers.map(s => ({
name: s.name,
isOnline: s.isOnline,
email: s.email
})),
}
Mikkel is right. I think you mean to do:
return sellers
// filter the array
.filter(selller => seller.isOnline === true)
// map the filtered array
.map(seller => {
return {
name: seller.name,
isOnline: seller.isOnline,
email: seller.email,
};
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With