是否有一种结合了地图和过滤器的RX方法?

时间:2015-09-07 22:57:03

标签: rxjs

我是RxJS的新手。我知道我可以.filter.map一个观察者来获得我正在寻找的改变。但是,是否有任何方法将两者合并为一个函数?

2 个答案:

答案 0 :(得分:25)

是的。

FlatMap。

假设您有一个Observable数字(1,2,3,4,5,...),并且您希望过滤偶数并将它们映射到x * 10.

var tenTimesEvenNumbers = numbers.flatMap(function (x) {
  if (x % 2 === 0) {
    return Rx.Observable.just(x * 10);
  } else {
    return Rx.Observable.empty();
  }
});

答案 1 :(得分:0)

rxjs v6.6.7 开始,解决方案如下:

    // Initialise observable with some numbers
    const numbers = of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

    // Pipe the observable using mergeMap
    const tenTimesEvenNumbers = numbers.pipe(
      mergeMap((x: number) => {
        // If the number is even, return an observable containing the number multiplied by ten
        // Otherwise return an empty observable
        return x % 2 === 0 ? of(x * 10) : EMPTY;
      })
    );

    // Subscribe to the observable and print the values
    tenTimesEvenNumbers.subscribe((value: number) =>
      console.log('Value:', value)
    );

上面会打印:

<块引用>
Value: 20
Value: 40
Value: 60
Value: 80
Value: 100

这里还有一个有效的 stackblitz