我有一个包含两个数组的观察者
source: BehaviorSubject
observers: (29) [Subscriber, Subscriber, ... FilterSubscriber]
_value:
leftTitles: (15) ["a", "b",... ]
name: "x"
rightTitles: (14) ["c", "d"...]
我做的事情看起来不太好但是可以正常工作
const index = this.obs$.source['_value']['leftTitles'].indexOf(tile);
this.obs$.source['_value']['leftTitles'].splice(index, 1);
并尝试使用管道和过滤器
this.obs$ = this.obs$.pipe(filter(
res => {
return res.leftTitles !== tile;
})
);
是否可以使用运算符或其他方法从Observable中的leftTiles或rightTiles数组中删除特定的观察者?
答案 0 :(得分:1)
注意:如@Adam所指出,以前的版本存在很多问题。如果有人感兴趣,可以从下面的 edited 链接中查找以前的版本。
因此,在再次查看解决方案之后,我意识到自己在犯一个愚蠢的错误。我为自己犯的那种错误感到尴尬。
自OP以来,要更改BehaviorSubject
内部的对象。因此,现在我们仅使用map
运算符,因为我们需要转换对象而不是filtering
。正如filter
所暗示的那样,您将基于某种条件从collection
中删除一些值。所以最终的解决方案看起来像这样。
首先定义一个函数来过滤数组,这不是必需的,但是...
function arrFilter(tile) {
return element => { element != tile; };
}
和数组过滤部分。
this.obs$ = this.obs$.pipe(map(res => ({...res, leftTitles: res.leftTitles.filter(arrFilter("1"))})));