У меня есть следующий метод, который возвращает результат, как показано ниже: result: [{status: 200, ...}, {status: 200, ...}, {status: 400, ...}, ...] I нужно сгруппировать результат, используя значение статуса ...

2
Natalia 16 Фев 2021 в 12:58

2 ответа

Лучший ответ

Я не уверен, что это работает, но вы можете попробовать ( вы фильтруете только объекты с определенным статусом, а затем выбираете только статусы ):

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
  });
}
2
AlleXyS 16 Фев 2021 в 10:34

Создайте собственный метод группировки следующим образом:

var groupBy = (xs, key) => {
  return xs.reduce((rv, x) => {
    (rv[x[key]] = rv[x[key]] || []).push(x);
    return rv;
  }, {});
};

console.log(groupBy([{status: 200, foo: 'bar'}, {status: 200, foo: 'baz'}, {status: 400, foo: 'bar'}], 'status'));

Выход:

{
    "200": [
        {
            "status": 200,
            "foo": "bar"
        },
        {
            "status": 200,
            "foo": "baz"
        }
    ],
    "400": [
        {
            "status": 400,
            "foo": "bar"
        }
    ]
}
2
DonJuwe 16 Фев 2021 в 10:24
66222207