Angular 我做错了什么RxJS操作符

Angular 我做错了什么RxJS操作符,angular,http,rxjs,Angular,Http,Rxjs,我正在学习角度和RxJS运算符。我正在使用炉石API来训练它。我做错了什么?我想过滤流,只返回“萨满”卡。我知道,Api让我有机会按类获得卡片,但我只想培训RxJS,所以我正在考虑这个问题。我的ts组件: 卡片:卡片[]; 恩戈尼尼特(){ 此.cardsService.getCards()管道( 过滤器((el:any)=>el.playerClass===‘萨满’) ).订阅(res=> 这是一个简单的例子(cards=res); }如果可观察的流返回类型是数组,则流中的项是数组。过滤管道

我正在学习角度和RxJS运算符。我正在使用炉石API来训练它。我做错了什么?我想过滤流,只返回“萨满”卡。我知道,Api让我有机会按类获得卡片,但我只想培训RxJS,所以我正在考虑这个问题。我的ts组件:

卡片:卡片[];
恩戈尼尼特(){
此.cardsService.getCards()管道(
过滤器((el:any)=>el.playerClass===‘萨满’)
).订阅(res=>
这是一个简单的例子(cards=res);

}
如果可观察的流返回类型是数组,则流中的项是数组。过滤管道操作符将过滤流中的项目。您的问题来自将any类型放在过滤器输入上-remove,它应该是card[]类型。然后尝试从数组中提取属性。

您的
getCards
方法返回
Observable
,这意味着它返回一个发出一个卡片数组的Observable。在这种情况下,您的可观察对象将发出一个值,然后完成

filter
可观测运算符与
数组
原型上的
filter
方法不同。可观察的
过滤器
将过滤来自源
可观察的
的排放,并且不会实际更改每次排放中的数据。在
过滤器
方法中显式键入
(el:any)
;这不应该在委托方法中完成,而应该从可观察对象本身隐式键入
Card
。这就是你的
过滤器
方法最初无法编译的原因

由于我们不想过滤掉发射的东西,而是想更改每个发射的值,因此我们将使用
map

this.cardsService.getCards().pipe(
  map(el => el.filter(s => s.playerClass === 'Shaman'))
).subscribe( // ...
而是更改发射的值(通过在发射的阵列上使用
Array.prototype.filter