从Observable中移除特定的观察者

时间:2019-11-26 12:59:02

标签: angular rxjs observable

我有一个包含两个数组的观察者

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数组中删除特定的观察者?

1 个答案:

答案 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"))})));