Reputation: 977
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?
Upvotes: 3
Views: 4525
Reputation: 795
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
})),
}
Upvotes: 5
Reputation: 51
getSellerDetails() {
return this.getSllers().pipe(
map(sellers =>
sellers
.filter(seller => seller.isOnline)
.map(seller => {
return {
name: seller.name,
isOnline: seller.isOnline,
email: seller.email
}
})
));
}
It looks like you didn't use seller filter result for mapping. Try this!
Upvotes: 0
Reputation: 18899
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,
};
});
Upvotes: 1