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