大家好,我是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));
但我如何处理第二个阵列?
答案 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数组一样工作。