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