首页 > 解决方案 > 从 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 中删除特定的观察者?

标签: angularrxjsobservable

解决方案


注意:正如@Adam 所指出的,以前的版本有很多问题。如果有人有兴趣,他们可以从下面的编辑链接中查找以前的版本。

因此,在再次查看解决方案后,我意识到我在做一个多么愚蠢的错误。我为自己犯的那种错误感到尴尬。

由于 OP,想要对BehaviorSubject. 所以现在我们简单地使用map运算符,因为我们需要转换对象而不是filtering它。这filter意味着您将collection根据某些条件从 a 中删除一些值。所以最终的解决方案是这样的。

首先定义一个函数来过滤数组,这不是必需的,但是嗯......

function arrFilter(tile) { 
    return element => { element != tile; }; 
}

和数组过滤部分。

this.obs$ = this.obs$.pipe(map(res => ({...res, leftTitles: res.leftTitles.filter(arrFilter("1"))})));

推荐阅读