Необходимо отсортировать объект по значению вложенного объекта в Typescript / Angular - PullRequest
0 голосов
/ 01 апреля 2020

Я работаю над созданием приложения Angular 9 для случаев covid-19, в которых я хочу отсортировать свои объекты по значению вложенных объектов.

Вот мои данные, которые я хочу отсортировать по объектам с сохранением состояния в алфавитном порядке на основе значения поля s tate:kerela ,state:haryana ;

{
  "history": [
    {
      "day": "2020-03-14",
      "total": {
        "confirmed": 84
      },
      "statewise": [
        {
          "state": "Kerala",
          "confirmed": 19
        },
        {
          "state": "Assam",
          "confirmed": 14
        }
      ]
    },


    {
      "day": "2020-03-15",
      "total": {
        "confirmed": 104
      },
      "statewise": [
        {
          "state": "Kerala",
          "confirmed": 119
        },
        {
          "state": "Assam",
          "confirmed": 114
        }
      ]
    }
  ]
}


, поэтому после сортировки мне нужны мои данные, такие как

SOrted Data

{
  "history": [
    {
      "day": "2020-03-14",
      "total": {
        "confirmed": 84
      },
      "statewise": [
        {
          "state": "Assam",
          "confirmed": 14
        },
        {
          "state": "Kerala",
          "confirmed": 19
        }
      ]
    },
    {
      "day": "2020-03-15",
      "total": {
        "confirmed": 104
      },
      "statewise": [
        {
          "state": "Assam",
          "confirmed": 114
        },
        {
          "state": "Kerala",
          "confirmed": 119
        }
      ]
    }
  ]
}

Ссылка на мои данные API находится здесь. Данные API Ссылка на данные API . Я пытался в течение двух дней, я попробовал этот ответ , но все еще не понимаю, как мне поступить. Любая помощь будет отличной.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Код ниже поможет:

this.postService.getDetails().subscribe(
  response => {
    let sortedData= response.data.history
      .sort(function(a, b) {
        return new Date(b.date) - new Date(a.date);
      }); //Sort based on date

      sortedData.forEach(item=>item.statewise.sort(function(a, b) {
        if (a.state < b.state) {
          return -1;
        }
        if (a.state > b.state) {
          return 1;
        }
        return 0;
      })); //sort state wise in alphabetical order

    console.log(sortedData);
    this.loading = false;
  },
  error => {
    console.log(error);
    this.loading = false;
  }
);

Пример демонстрации:

https://stackblitz.com/edit/angular-rxjs-operators-examples?file=src%2Fapp%2Fstackoverflow%2Fmerge-map-error%2Fmerge-map-error.component.ts

https://angular-rxjs-operators-examples.stackblitz.io/stackoverflow

Ищите консоль для отсортированных данных.

0 голосов
/ 01 апреля 2020

Вы можете сделать это, используя sort прототип массива.

let records = {
  "history": [
    {
      "day": "2020-03-14",
      "total": {
        "confirmed": 84
      },
      "statewise": [
        {
          "state": "Kerala",
          "confirmed": 19
        },
        {
          "state": "Assam",
          "confirmed": 14
        }
      ]
    },


    {
      "day": "2020-03-15",
      "total": {
        "confirmed": 104
      },
      "statewise": [
        {
          "state": "Kerala",
          "confirmed": 119
        },
        {
          "state": "Assam",
          "confirmed": 114
        }
      ]
    }
  ]
};

const res = {history: []};

res.history = records.history.map(history => {
	history.statewise.sort((a, b) => a.state < b.state ? -1 : 1);
    return history;
});

console.log(res);
.as-console-wrapper {
    min-height: 100% !important;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...