如何使用RxJS运算符

时间:2018-01-07 10:55:11

标签: javascript arrays rxjs rxjs5

大家好,我是RxJs和反应式编程的新手,我想过滤这样的数组:

let subscription = Rx.Observable.from([{id: 1}, {id: 2}, {id: 3}],[{id: 4}, {id: 5}, {id: 6}]);

如果我有一个阵列,我可以这样做:

let subscription = Rx.Observable.from([{id: 1}, {id: 2}, {id: 3}]);


subscription.filter(x => x.id === 1).subscribe(x => console.log(x));

但我如何处理第二个阵列?

2 个答案:

答案 0 :(得分:1)

如果您知道您将始终拥有数组数组,则可以展平数组,然后运行filter

const o = Rx.Observable.of([{id: 1}, {id: 2}, {id: 3}],[{id: 1}, {id: 2}, {id: 3}])
  .concatMap(array => array) // flatten the array into single emissions
  .filter(x => x.id === 1)
  .subscribe(x => console.log(x));

我使用接受多个参数的.of。但是它需要它们,因为它们不同于迭代数组的from方法。

答案 1 :(得分:0)

有几种解决方案。简单的方法就是创造正确的可观察性。

  • 您可以通过连接输入中的数组直接创建正确的observable:

    let subscription = Rx.Observable.from([{id: 1}, {id: 3}].concat([{id: 1}]));
    
  • 您可以使用Rx.Observable.of,它直接在创建的Observable中获取与value一样多的参数,并使用spread运算符:

    let subscription = Rx.Observable.of(...[{id: 1}, {id: 3}].concat(...[{id: 1}]));
    
  • 您还可以合并两个不同的可观察量:

    let subscription = Rx.Observable.from([{id: 1}
                          .merge(Rx.Observable.from([{ id: 1}]);
    

可能有其他解决方案可以像使用数组数组然后flatMapping数组一样工作。