首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rxjs6 -过滤对象数组

Rxjs6 -过滤对象数组
EN

Stack Overflow用户
提问于 2018-08-17 14:54:13
回答 2查看 16.7K关注 0票数 13

我将使用RXJS运算符filter过滤对象数组。

我有很多像这个一样的物体:

代码语言:javascript
复制
    {
      id: string,
      count: number
    }

我会得到那些count > 20的对象

我试过:

代码语言:javascript
复制
  getVotes2(): Observable<Vote> {
    return this._http.get<Vote>(url)
     .pipe(
       map( results => results ),
       filter( result => result.count>20 )
     );
  }

接下来,没有map和我总是能得到所有的记录。

有什么想法吗?

代码语言:javascript
复制
getVotes2(): Observable<Vote[]> {
 return this._http.get<Vote[]>(url)
  .pipe(
    map( results => results.filter( r => r.count < 20) )
  )
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-17 15:45:13

您对rx过滤器操作符的使用感到困惑。

filter rx运算符与数组filter运算符不一样。rx过滤器对流进行操作,并将满足条件的事物从流中排除,数组过滤器运算符对数组进行操作,并根据条件从数组中移除项。

您目前正在对数组本身的某个未定义的"count“属性过滤流,因此您在说”如果未定义> 20,那么不要让项目通过流“,而javascript (未定义)的一个怪癖是,尽管它是无效的比较,但它不大于20。

你需要做的是:

代码语言:javascript
复制
getVotes2(): Observable<Vote[]> {
 return this._http.get<Vote[]>(url)
  .pipe(
    map( results => results.filter(r => r.count > 20) )
  );
}

通过这种方式,可以使用rx对流中的项执行操作,并使用项上的数组筛选器对数组进行筛选。

编辑:正如所指出的,键入也需要正确,以便让类型记录知道您期待的是一个数组的投票对象,而不是一个单一的投票对象。

票数 44
EN

Stack Overflow用户

发布于 2018-08-17 15:26:10

如果您得到的http响应类似于

代码语言:javascript
复制
{ 
  data: {
    results: [ {id: 'dd5144s', count: 14}, {id: 'dd51s4s', count: 22}, {id: 'dd5sa44s', count: 8}  ]
  }
}

然后试试这个:

代码语言:javascript
复制
 return this._http.get<Vote>(url)
   .pipe(
     switchMap( results => results ),
     filter( result => result.count>20 )
   );

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51898005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档