有没有结合map和filter的RX方法?

Is there an RX method which combines map and filter?

我是 RxJS 的新手。我知道我可以 .filter.map 一个 observable 来获得我正在寻找的变化。但是,有没有什么方法可以将两者合二为一呢?

是的。

平面地图。

假设你有一个数字(1、2、3、4、5、...)的 Observable,你想过滤偶数并将它们映射到 x*10。

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

rxjsv6.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