我使用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(???);
解决此问题的最佳方法是什么?
我不能这样做!
感谢您的帮助
答案 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。