angular2 observables 过滤每个数组元素而不是 return 到一个数组

angular2 observables filter each array element than return it to an array

我有一组线程 Objects,其中包含 ID、标题和 isBookmarked:boolean。

我已经创建了一个 Subject 并且我想订阅它以获得线程数组 Objects with isBookmarked=true.

https://plnkr.co/edit/IFGiM8KoSYW6G0kjGDdY?p=preview

在我拥有的服务中

export class Service {

  threadlist:Thread[] = [
    new Thread(1,'Thread 1',false),
    new Thread(2,'Thread 2',true),
    new Thread(3,'Thread 3',false),
    new Thread(4,'Thread 4',true),
    new Thread(5,'Thread 5',true),
    new Thread(6,'Thread 6',false),
    new Thread(7,'Thread 7',false),
    ]

  threadlist$:Subject<Thread[]> = new Subject<Thread[]>()

 update() {
   this.threadlist$.next(this.threadlist)
 }

}

在组件中

export class AppComponent implements OnInit {
 localThreadlist:Thread[];
 localThreadlistFiltered:Thread[];
 constructor(private _service:Service){}

 ngOnInit():any{
  //This updates the view with the full list
  this._service.threadlist$.subscribe( threadlist => {
    this.localThreadlist = threadlist;
  })
  //here only if isBookmarked = true
  this._service.threadlist$
    .from(threadlist)//????
    .filter(thread => thread.isBookmarked == true)
    .toArray()
    .subscribe( threadlist => {
      this.localThreadlistFiltered = threadlist;
    })
  }
  update() {
    this._service.update();
  }
}

我通常使用哪种实例方法来拆分数组? 还有更好的方法吗?

谢谢

您将在可观察对象的 map 运算符中利用 JavaScript 数组的 filter 方法:

this._service.threadlist$
  .map((threads) => {
    return threads.filter((thead) => thread.isBookmarked);
  })
  .subscribe( threadlist => {
    this.localThreadlistFiltered = threadlist;
  });

看到这个 plunkr:https://plnkr.co/edit/COaal3rLHnLJX4QmvkqC?p=preview