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
  });
}