【问题标题】:Angular: How do I Rxjs filter by property through an array of objects?Angular:如何通过对象数组按属性过滤 Rxjs?
【发布时间】:2019-01-17 08:11:25
【问题描述】:

将 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 返回上面引用的数组。在我尝试过的过滤器内:

value => !value.is_etf

value => return value.is_etf === false

value => value['is_etf'] === false

但是这些都不起作用,因为 is_etf 属性在每个对象上,而不是在值响应上。在 RXJS 之前,我会执行一个 for 循环,然后使用 value[i]['is_etf'] 等,但这里没有运气。我遇到的所有阅读材料都在做简单的过滤器,比如 value => value > 2 ... 有什么建议吗?

谢谢!!

【问题讨论】:

    标签: javascript arrays object rxjs rxjs5


    【解决方案1】:

    RxJS 中的 filter 运算符的行为与用于从列表中过滤项目的 Array.filter 函数不同。

    你实际上从this.symbolSearchService.symbolLookup(val) 得到的似乎是一个数组,所以filter 中的发射类型也将是一个数组。因此,您可能正在寻找一个 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;
          });
    

    【讨论】:

    • 将查看地图,谢谢@ggradnig。哦,是的,这有效!再次感谢!
    • 这看起来像一个打字问题..您需要为您接收的数据类型声明一个接口并在 this.symbolSearchService.symbolLookup(val) 处返回它
    猜你喜欢
    • 2019-08-22
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2019-05-04
    • 2020-04-21
    相关资源
    最近更新 更多