Angular:Rxjs 如何通过对象数组按 属性 过滤?
Angular: How do I Rxjs filter by property through an array of objects?
将 RXJS v5.5 过滤器应用于对象数组的正确方法是什么?
我正在取回一个 json 数组,如下所示:
[
0: {CompanyName: "Facebook Inc-A", Symbol: "FB", is_etf: false},
1: {CompanyName: "Flagstar Bancp", Symbol: "FBC", is_etf: false},
2: {CompanyName: "UBS AG FI Enhanced Large Cap Growth ETN", etf_data: {…}, Symbol: "FBGX", is_etf: true},
3: {CompanyName: "Fortune Brd H&S", Symbol: "FBHS", is_etf: false},
4: {CompanyName: "Fortress Biotec", Symbol: "FBIO", is_etf: false},
5: {CompanyName: "First Bus Finl", Symbol: "FBIZ", is_etf: false},
...]
我需要保持 is_etf === false
的值
我目前有:
...
.switchMap(val => this.symbolSearchService.symbolLookup(val))
.takeUntil(this.ngUnsubscribe)
.filter((value) => {
console.log(value)
return true
})
.subscribe(val => {
console.log('val', val)
this.searchResults = val;
});
symbolLookup returns 上面引用的数组。在我试过的过滤器中:
value => !value.is_etf
value => return value.is_etf === false
value => value['is_etf'] === false
但是 none 这些工作,因为 is_etf 属性 在每个对象上,而不是在值响应上。在 RXJS 之前,我只会做一个 for 循环,然后只用 value[i]['is_etf']
等,但这里没有运气。我遇到的所有阅读材料都在做简单的过滤,比如 value => value > 2 ...有什么建议吗?
谢谢!!
RxJS 中的 filter
运算符与用于从列表中过滤项目的 Array.filter
函数不同。
你实际上从this.symbolSearchService.symbolLookup(val)
得到的似乎是一个数组,所以filter
中的emmission类型也是一个数组。因此,您可能正在寻找的是转发过滤列表的 map
运算符,如下所示:
.switchMap(val => this.symbolSearchService.symbolLookup(val))
.takeUntil(this.ngUnsubscribe)
.map((values) => {
return values.filter(v => !v.is_etf);
})
.subscribe(val => {
console.log('val', val)
this.searchResults = val;
});
将 RXJS v5.5 过滤器应用于对象数组的正确方法是什么?
我正在取回一个 json 数组,如下所示:
[
0: {CompanyName: "Facebook Inc-A", Symbol: "FB", is_etf: false},
1: {CompanyName: "Flagstar Bancp", Symbol: "FBC", is_etf: false},
2: {CompanyName: "UBS AG FI Enhanced Large Cap Growth ETN", etf_data: {…}, Symbol: "FBGX", is_etf: true},
3: {CompanyName: "Fortune Brd H&S", Symbol: "FBHS", is_etf: false},
4: {CompanyName: "Fortress Biotec", Symbol: "FBIO", is_etf: false},
5: {CompanyName: "First Bus Finl", Symbol: "FBIZ", is_etf: false},
...]
我需要保持 is_etf === false
我目前有:
...
.switchMap(val => this.symbolSearchService.symbolLookup(val))
.takeUntil(this.ngUnsubscribe)
.filter((value) => {
console.log(value)
return true
})
.subscribe(val => {
console.log('val', val)
this.searchResults = val;
});
symbolLookup returns 上面引用的数组。在我试过的过滤器中:
value => !value.is_etf
value => return value.is_etf === false
value => value['is_etf'] === false
但是 none 这些工作,因为 is_etf 属性 在每个对象上,而不是在值响应上。在 RXJS 之前,我只会做一个 for 循环,然后只用 value[i]['is_etf']
等,但这里没有运气。我遇到的所有阅读材料都在做简单的过滤,比如 value => value > 2 ...有什么建议吗?
谢谢!!
RxJS 中的 filter
运算符与用于从列表中过滤项目的 Array.filter
函数不同。
你实际上从this.symbolSearchService.symbolLookup(val)
得到的似乎是一个数组,所以filter
中的emmission类型也是一个数组。因此,您可能正在寻找的是转发过滤列表的 map
运算符,如下所示:
.switchMap(val => this.symbolSearchService.symbolLookup(val))
.takeUntil(this.ngUnsubscribe)
.map((values) => {
return values.filter(v => !v.is_etf);
})
.subscribe(val => {
console.log('val', val)
this.searchResults = val;
});