如何对可观测数组进行过滤运算? [英] how to filter an Observable array?

查看:18
本文介绍了如何对可观测数组进行过滤运算?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的方法从Firebase返回一个可观察的数组。我已经决定用过滤将数据放在客户端而不是服务器中。我的问题是,我只想在属性"ADGING=TRUE"时获取数据。我们非常感谢任何帮助或其他方式。非常感谢。

下面的方法从FireBase实时数据库获取数据

userEvents: Observable<any[]>;

getUserEvents(uid: string) {
this.userEvents = this.db.list(this.basePatheventsSaved, ref=> 
 ref.orderByChild('uid').equalTo(uid)).snapshotChanges().map((actions) => {
  return actions.map((a) => {
    const data = a.payload.val();
    const $key = a.payload.key;
    return { $key, ...data };
  });
});
return this.userEvents;
} 

以下代码用于清除模板中要使用的数据:

 userEvents: Observable<any[]>;
 constructor(public auth: AuthService, private upSvc: FilesServiceService) { 
this.userEvents = this.upSvc.getUserEvents(this.auth.currentUserId);
 }

推荐答案

您应该能够为此使用mapfilter运算符,与Array.prototype.filter结合使用。如果我正确理解了您的数据,应该是这样的:

import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/map';

userEvents: Observable<any[]>;

constructor(public auth: AuthService, private upSvc: FilesServiceService) { 
  this.userEvents = this.upSvc.getUserEvents(this.auth.currentUserId)
    .map(items => items.filter(item => item.attending))
    .filter(items => items && items.length > 0);
}
首先,我们用过滤将数组向下扩展到attending为true的项。 然后我们用过滤将所有空数组或NULL数组去掉。

已为RXJS 6更新:

import { pipe } from 'rxjs'; 
import { map, filter } from 'rxjs/operators';

userEvents: Observable<any[]>;

constructor(public auth: AuthService, private upSvc: FilesServiceService) { 
  this.userEvents = this.upSvc.getUserEvents(this.auth.currentUserId)
    .pipe(
      map(items => items.filter(item => item.attending)),
      filter(items => items && items.length > 0)
    );
}

这篇关于如何对可观测数组进行过滤运算?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆