过滤Observable <any>

时间:2017-09-28 07:14:54

标签: angular typescript rxjs

我使用Typescript和angular 4。 我有2个列表(rxjs / Rx)

...
 myList: Observable<MyClass[]>;
 filteredList: Observable<MyClass[]>;
...

我想过滤myList并将结果推送到filteredList中 通过查看MyClass的属性字符串等于&#39; 123&#39;或另一个字符串 筛选列表映射到自动完成角度 我有这个代码

 this.filteredList= this.myForm.get("myautocomplete").valueChanges .startWith(null) .map(???); 

解决此问题的最佳方法是什么?

我不能这样做!

感谢您的帮助

3 个答案:

答案 0 :(得分:3)

这应该这样做:

myList: Observable<MyClass[]>;
filteredList = myList.map(items => 
  items.filter(item => item.string === '123'));

自动填充示例:

filteredList = myForm.get("autocomplete").valueChanges 
  .startWith('')
  .combineLatest(myList)
  .map(([q, items]) => items.filter(item => item.string === q));

答案 1 :(得分:1)

好吧,因为打字稿是基于JS的,所以如果你想知道是否有方法来做这个或那个,那就去看看吧。

您想在数组上使用.filter

- 来自MDN

The filter() method creates a new array with all elements that pass the test implemented by the provided function.

因此,如果你想过滤名为ar的数组[0,1,2,3]上的数字0,例如:

filteredAr = ar.filter(entry => entry !== 0);

但由于它是一个可观察的,你必须订阅它的变化并改变filteredList类型......

答案 2 :(得分:0)

你有两个可观察者。 你想先拿一个并将它转换成一点。您可以使用methid .map

filteredList = myList.map(arr => arr.filter(x => x['stringPropOfMyClass'] === '123'));

我建议您先获取basics of Observables down