【问题标题】:Rxjs use min operator on array propertyRxjs 在数组属性上使用 min 运算符
【发布时间】:2017-09-12 09:43:07
【问题描述】:

我知道我们可以在一个数字数组上使用 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,并尝试在 store.select Observable 上使用 min 运算符。出于某种原因,下面的代码,我首先订阅,然后从响应中创建另一个 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));

【问题讨论】:

  • 我知道min有比较功能,但我不知道这里能不能用:为什么不能用?你为什么不试试呢?该文档甚至有一个示例正是您想要实现的目标:reactivex.io/rxjs/class/es6/…
  • 我有。比较取两个值。他们会是什么?想不通。你能举个例子吗?
  • 正如我刚才所说,文档中有一个示例。该函数接受您的 observable 发出的两个对象,并比较它们。就像 Array.sort().
  • @JBNizet 哇.. 看了文档中的另一页,我已经绞尽脑汁一个小时了。 reactivex.io/documentation/operators/min.html
  • 我必须承认 Rxjs 文档很烂。甚至我链接的例子也不是很正确:如果两个人的年龄相同,该函数应该返回 0。

标签: angular operators min rxjs5 ngrx


【解决方案1】:

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));

【讨论】:

  • 你能看看编辑。感谢您的帮助!
  • 不,它们是不同的东西。 min 处理具有多个值的 observable 并选择最小值。在第二种情况下,它是一个具有单个值的 observable,它是一个数组。应该是this.store.select(fromRoot.getClientFacilitiesArray).take(1).mergeMap(arr =&gt; Observable.from(arr)).min(...))
猜你喜欢
  • 2017-02-18
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多