Rxjs在数组属性上使用min运算符

时间:2017-04-16 17:46:31

标签: angular operators min rxjs5 ngrx

我知道我们可以在数组数组上使用min运算符。但是我如何在具有数字属性的对象数组上使用它?

var source = Rx.Observable.fromArray([1,3,5,7,9,2,4,6,8]).min();

这是文档描述它的方式。这将发出1。我该怎么做......

var source = Rx.Observable.fromArray([{a: 1, b:"first"},{a: 3, b:"second"},{a: 5, b:"third"}]).min();

我想通过内部属性值使用min。因此,比较数组中每个对象的a值并发出该对象。

我理解min需要比较功能,但我不知道它是否可以在这里使用。

我还希望它发出对象,而不是最小属性值。

编辑:

所以,我在Angular 4应用程序中使用Ngrx并尝试在min Observable上使用store.select运算符。对于一些reasong,下面的代码,我首先订阅,然后从响应创建另一个observable然后使用min工作,但如果我跳过订阅并尝试使用min运算符,如较低的代码,它失败并发出完整的ClientFacilities数组。

有人知道发生了什么事吗?他们俩都不是一回事吗?

这有效:

this.store.select(fromRoot.getClientFacilitiesArray).take(1).subscribe(res => {
                    Observable.from(res).min<ClientFacility>((a, b) => a.leaders_assigned - b.leaders_assigned)
                        .subscribe(res => console.log(res));
                })

这失败了:

this.store.select(fromRoot.getClientFacilitiesArray).take(1)
.min<ClientFacility>((a, b) => a.leaders_assigned - b.leaders_assigned)
                        .subscribe(res => console.log(res));

1 个答案:

答案 0 :(得分:3)

Rx.Observable.fromArray([1,3,5,7,9,2,4,6,8]).min()是RxJS 4的一个例子,它不能与RxJS 5一起使用。

RxJS 5文档的正确位置为http://reactivex.io/rxjs/,而http://reactivex.io/documentation/包含RxJS 4文档。

根据min operator documentation,它可以接受比较功能,其行为与array sort method接受的功能类似。

Here就是一个例子:

Rx.Observable.from([{a: 1, b:"first"},{a: 3, b:"second"},{a: 5, b:"third"}])
.min((objA, objB) => objA.a - objB.a)
.subscribe(val => console.log(val));