如何根据值以角度过滤 Observable 数组

问题描述 投票:0回答:3

我请求一个 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 的卖家。我的片段似乎不起作用。最好的方法是什么?

angular filter rxjs observable
3个回答
5
投票
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
        })),
 }


1
投票

米克尔是对的。我想你的意思是:

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,
  };
});

0
投票
getSellerDetails() {
    return this.getSllers().pipe(
        map(sellers => 
         sellers
         .filter(seller => seller.isOnline)
         .map(seller => {
            return {
                name: seller.name,
                isOnline: seller.isOnline,
                email: seller.email
            }
        })
    )); 
 }

您似乎没有使用卖家过滤结果进行映射。 试试这个!

© www.soinside.com 2019 - 2024. All rights reserved.