Javascript 如何通过RxJs进行合并或分组?
我有如下返回结果的方法,如下所示:Javascript 如何通过RxJs进行合并或分组?,javascript,angular,typescript,rxjs,Javascript,Angular,Typescript,Rxjs,我有如下返回结果的方法,如下所示: result: [ { status: 200, ... }, { status: 200, ... }, { status: 400, ... }, ... ] 我需要使用status value对结果进行分组,对于上面的示例结果,只返回2个结果,而不是3个结果: update() { this.demoService.update(...).toPromise() .then(result => { const mess
result: [ { status: 200, ... }, { status: 200, ... }, { status: 400, ... }, ... ]
我需要使用status value对结果进行分组,对于上面的示例结果,只返回2个结果,而不是3个结果:
update() {
this.demoService.update(...).toPromise()
.then(result => {
const message = result.map((x: any) => {
if (x.status === 200) {
return {
text: 'successful'
};
} else {
return {
text: 'fail'
};
}
});
}
})
}
我尝试使用RxJs的
groupBy
,但我认为它不能用于承诺。那么,如何在上面的示例中对该结果进行分组?我不确定它是否有效,但您可以尝试(您只筛选具有不同状态的实体,然后只选择状态):
创建如下自定义分组方法:
var groupBy=(xs,key)=>{
返回x.reduce((rv,x)=>{
(rv[x[键]]=rv[x[键]| |[])。按(x);
返回rv;
}, {});
};
log(groupBy([{status:200,foo'bar'},{status:200,foo'baz'},{status:400,foo'bar'},'status')代码>你为什么要使用承诺
?您可以使用groupBy()
在管道化可观察对象时:this.demoService.update(…).pipe(groupBy())
是的,但是我想知道是否有可能在toPromise中使用groupBy?您不能在那里使用RxJs操作符。但是您可以通过法线映射实现它:groupBy
是一个RxJs
操作符,只能在pipe()中使用。你只需要打印不同的状态码吗?@DonJuwe在那个例子中你指的是哪一个?你能在我的问题中发布你提到的更新方法并作为答案发布吗?
update() {
this.demoService.update(...).subscribe(result => {
const messages = result
.filter((x, i, arr) => arr.findIndex(t => t.status === x.status) === i)
.map(x => x.status);
// do stuff
});
}