如何使用 RxJS 运算符过滤数组
How to filter an array with RxJS operator
大家好,我是 RxJs 和响应式编程的新手,我想像这样过滤一个数组:
let subscription = Rx.Observable.from([{id: 1}, {id: 2}, {id: 3}],[{id: 4}, {id: 5}, {id: 6}]);
如果我有一个数组 a 我可以这样做:
let subscription = Rx.Observable.from([{id: 1}, {id: 2}, {id: 3}]);
subscription.filter(x => x.id === 1).subscribe(x => console.log(x));
但是我该如何处理第二个数组?
有几个解决方案。简单的方法就是创建正确的可观察对象。
您可以通过在您的输入中连接数组来直接创建正确的可观察对象 from:
let subscription = Rx.Observable.from([{id: 1}, {id: 3}].concat([{id: 1}]));
你可以使用 Rx.Observable.of 直接接受与创建的 Observable 中的值一样多的参数并使用扩展运算符:
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}]);
可能还有其他解决方案可以工作,例如使用数组的数组,然后对该数组进行平面映射。
如果你知道你总是有数组数组你可以展平数组然后 运行 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
方法。
大家好,我是 RxJs 和响应式编程的新手,我想像这样过滤一个数组:
let subscription = Rx.Observable.from([{id: 1}, {id: 2}, {id: 3}],[{id: 4}, {id: 5}, {id: 6}]);
如果我有一个数组 a 我可以这样做:
let subscription = Rx.Observable.from([{id: 1}, {id: 2}, {id: 3}]);
subscription.filter(x => x.id === 1).subscribe(x => console.log(x));
但是我该如何处理第二个数组?
有几个解决方案。简单的方法就是创建正确的可观察对象。
您可以通过在您的输入中连接数组来直接创建正确的可观察对象 from:
let subscription = Rx.Observable.from([{id: 1}, {id: 3}].concat([{id: 1}]));
你可以使用 Rx.Observable.of 直接接受与创建的 Observable 中的值一样多的参数并使用扩展运算符:
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}]);
可能还有其他解决方案可以工作,例如使用数组的数组,然后对该数组进行平面映射。
如果你知道你总是有数组数组你可以展平数组然后 运行 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
方法。