我请求一个 Web 服务并接收一个可观察对象,然后循环它们以构建另一个对象数组,如下所示。
export interface Seller {
email?:String;
isOnline?:boolean;
name?:String;
}
角度分量:
sellers: Observable<Seller[]>;
constructor(firestore: AngularFirestore) {
this.sellers = firestore.collection('sellers').valueChanges();
}
getSllers(){
return this.sellers;
}
使用这些卖家 Observable 创建对象数组。
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
}
});
}));
}
在这里,我只想过滤掉那些具有
isOnline
true 的卖家。我的片段似乎不起作用。最好的方法是什么?
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
}
});
})
)
}
也可以简化为:
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
})),
}
米克尔是对的。我想你的意思是:
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,
};
});
getSellerDetails() {
return this.getSllers().pipe(
map(sellers =>
sellers
.filter(seller => seller.isOnline)
.map(seller => {
return {
name: seller.name,
isOnline: seller.isOnline,
email: seller.email
}
})
));
}
您似乎没有使用卖家过滤结果进行映射。 试试这个!