如何以RxJS的方式通过索引删除和添加数组中的元素?

如何以RxJS的方式通过索引删除和添加数组中的元素?,rxjs,rxjs5,Rxjs,Rxjs5,因此,我有一系列“事件”: let events=Rx.Observable.from([1,2,3,4,5,6,7,8,9]); 我可以添加(推送): let add=函数(编号){ events=events.concat([number]); } 我可以删除: let remove=function(){ 事件=事件。筛选器(事件=>{ 返回事件!=3; }) } 我的第一个问题: 如何以“RxJS”的方式通过索引删除和添加元素 让removeByIndex=函数(索引){ //按索

因此,我有一系列“事件”:

let events=Rx.Observable.from([1,2,3,4,5,6,7,8,9]);
我可以添加(推送):

let add=函数(编号){
events=events.concat([number]);
}
我可以删除:

let remove=function(){
事件=事件。筛选器(事件=>{
返回事件!=3;
})
}
我的第一个问题: 如何以“RxJS”的方式通过索引删除和添加元素

让removeByIndex=函数(索引){
//按索引删除
}
设addByIndex=函数(索引){
//按索引添加
}
我的第二个问题:
我需要为RxJS上的所有基本数组方法“重新发明轮子”,从和的

你的目的是什么?您的Observable只是一个发布者,它在您的应用程序中的某个地方监听

在这种情况下,您可以使用一个方法
publish
,在其中推送新数组:

class EventStream {
   private numbers$: Subject<number[]> = new Subject() 
   //or BehaviorSubject if you want a default value

   publish(arrayNumberToPublish: number[]): void {
      this.numbers$.next(arrayNumberToPublish)
   }

   listen(): Observable<number[]> {
      return this.numbers$
   }
}

}

这些方法不存在于可观测数据上是有原因的,根据你的问题,你根本不清楚为什么要使用可观测数据。这样做的一个要点是避免你试图重新实施的副作用。好吧,也许我不是以被动的方式思考。非常感谢。将可观测数据视为黑盒数据流。您可以通过修改现有的可观察/流来创建新的可观察/流,但不能修改原始的可观察/流。例如,考虑在按键事件上有一个观察者。现在你说要删除索引3处的按键?这到底是什么意思?您想将按键事件推送到可观察对象上吗?怎么用?你没有反应性思维,这是对的:你的问题在那个模型中没有意义。谢谢你的回答。我很喜欢。@JhonataRibeiro欢迎你!如果我的答案对您有帮助,您可以投票和/或验证答案,以帮助其他有相同问题的人;)
class EventManager {
   private events: number[] = []
   private events$: Subject<number[]> = new Subject()
   //or BehaviorSubject if you want a default value

   getAllEvents(): Observable<number[]> {
      return this.events$
   }

   addEvent(index: number): void {
      this.events = this.events.concat(index)
      this.events$.next(this.events)
   }

   removeEvent(index: number): void {
      this.events = this.events.filter(event => event !== index)
      this.events$.next(this.events)
   }