如何过滤RxJS Map Oberservable

时间:2017-04-11 08:13:49

标签: angular dictionary rxjs

我目前正在通过使用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而不是单个实例。我真的很感激任何建议。

1 个答案:

答案 0 :(得分:0)

首先,

您正在处理Observable

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

返回Observable<MyObject[]>。因此,如果您在.filter()上调用Observable,则会过滤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];
  });
}