【问题标题】:RxJS Observable filtering and groupingRxJS Observable 过滤和分组
【发布时间】:2017-08-25 10:33:44
【问题描述】:

我是响应式编程的新手,有时会有点复杂。

给定一个来自服务事件的列表[]

事件看起来像

Event:
{
 beginDate: Date,
 name: string,
 type: State
}

State:
{
  PENDING, FINISHED, UPCOMING
}

我想按以下结构分组

GroupedByMonthEvent:
{
monthYear: Date,
event: Event
}

我用命令式写它:

allEvents$: Observable<Tournament[]>;
allEventsGrouped$: Observable<GroupedByMonthEvent[]>;  

...
this.allEvents$ = this.store.select(state => state.events);

this.allEventsGrouped$ = this.allEvents$.map(t => {
      return _.chain(t).sortBy(function (value) {
        return new Date(value.beginDate);
      })
        .groupBy(function (event) {
          return moment(event.beginDate).format('MMMM YYYY');
        }).toPairs()
        .map(function (events: Event[]) {
          return _.zipObject(['monthYear', 'events'], events);
        })
        .value();
    });

接下来我要过滤那个 Observerable。 我试图 .map 和 .filter 该集合,但我不明白。 现在我只是订阅 Observerable 并用老式方法过滤它。

有人可以帮助使用 RxJS 魔法在一个简单的语句中对其进行分组和过滤吗?

【问题讨论】:

    标签: angular rxjs observable


    【解决方案1】:

    欢迎来到 Observables 的美妙世界。

    您可以使用 ForkJoin 将多个 Observable 合并为一个:

    在此处查看此链接:https://www.learnrxjs.io/operators/combination/forkjoin.html

    sn-p:

    /*
      when all observables complete, give the last
      emitted value from each as an array
    */
    const example = Rx.Observable.forkJoin(
      //emit 'Hello' immediately
      Rx.Observable.of('Hello'),
      //emit 'World' after 1 second
      Rx.Observable.of('World').delay(1000),
      //emit 0 after 1 second
      Rx.Observable.interval(1000).take(1),
      //emit 0...1 in 1 second interval
      Rx.Observable.interval(1000).take(2),
      //promise that resolves to 'Promise Resolved' after 5 seconds
      myPromise('RESULT')
    );
    //output: ["Hello", "World", 0, 1, "Promise Resolved: RESULT"]
    const subscribe = example.subscribe(val => console.log(val));
    

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      相关资源
      最近更新 更多