【问题标题】:How to filter a RxJS Map Oberservable如何过滤 RxJS Map Observable
【发布时间】:2017-04-11 17:05:24
【问题描述】:

我目前正在努力使用 RxJS 过滤 Map Observable。 我尝试做的是在订阅之前通过过滤函数减少我的 Map-Object。

我这样初始化主题:

public myObjects: ReplaySubject<Map<number, MyClass>> = new ReplaySubject<Map<number, MyClass>>(1);

这就是我尝试过滤的方式:

public subscribeToIncomingObjects() {
this.myObjects.map( (currentValue:Map<number, MyObject>) => Array.from(currentValue.values())).filter(
  (con:myObject, index) => {
    return someCondition;
  }
);
 }

由于某种原因 con 是 Array 类型而不是单个实例。我真的很感激任何建议。

【问题讨论】:

  • 您从上一个 .map() 调用返回一个带有 Array.from(...) 的数组。这就是为什么下面的 filter() 获取 Array 而不是原始对象的原因。
  • 嗨@mar​​tin,感谢您的解释。出于某种原因,我希望在我的过滤器函数中获得数组的单个值,如下所述:reactivex.io/documentation/operators/filter.html。 Rx.Observable.range(X,Y) 不是真的生成了一个 Array Observable 吗?
  • 不,这会创建一个 Observable&lt;number&gt; 实例,该实例将该范围内的每个数字作为单独的项目发出。

标签: angular dictionary rxjs


【解决方案1】:

第一件事,

您正在与Observable 打交道:

this.myObjects.map( (currentValue:Map<number, MyObject>) => Array.from(currentValue.values()))

返回一个Observable&lt;MyObject[]&gt;。因此,如果您在该 Observable 上调用 .filter(),则您正在过滤 Observable 的广播。

你可以像这样调用你的过滤器:

public subscribeToIncomingObjects() {
  this.myObjects.map((currentValue: Map < number, MyObject > ) => {
    return Array.from(currentValue.values())
      .filter((con: myObject, index) => someCondition);
  });
}

但是你仍然会得到一个数组,如果你需要一个实例,你最好使用Array.prototype.find()(如果它可用):

public subscribeToIncomingObjects() {
  this.myObjects.map((currentValue: Map < number, MyObject > ) => {
    return Array.from(currentValue.values())
      .find((con: myObject, index) => someCondition);
  });
}

或者,仍在使用Array.prototype.filter()

public subscribeToIncomingObjects() {
  this.myObjects.map((currentValue: Map < number, MyObject > ) => {
    return Array.from(currentValue.values())
      .filter((con: myObject, index) => someCondition)[0];
  });
}

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    相关资源
    最近更新 更多