JS Создать две даты и отсортировать их - PullRequest
1 голос
/ 01 мая 2020

Я работаю над приложением, которое получает ответ из базы данных, которая не содержит прямой метки времени, и каждый день, когда я проверяю приложение, данные получаются по-разному, что приводит к тому, что мои диаграммы отображаются в обратном направлении, если я не сделаю этого. .reverse () (или вынуть).

Я бы хотел исправить это навсегда с помощью sort (), но я не уверен, как вызвать функцию, так как ответ не содержит прямых меток времени. Вот пример ответа от API:

"records": [
    { 
      "dateRep": "01/05/2020",
      "day": "1",
      "month": "5",
      "year": "2020",
      "cases": "222",
      "deaths": "4",
      "countriesAndTerritories": "Afghanistan",
      "geoId": "AF",
      "countryterritoryCode": "AFG",
      "popData2018": "37172386",
      "continentExp": "Asia"
    }, 
    { 
      "dateRep": "30/04/2020",
      "day": "30",
      "month": "4",
      "year": "2020",
      "cases": "122",
      "deaths": "0",
      "countriesAndTerritories": "Afghanistan",
      "geoId": "AF",
      "countryterritoryCode": "AFG",
      "popData2018": "37172386",
      "continentExp": "Asia"
    }, 
    { 
      "dateRep": "29/04/2020",
      "day": "29",
      "month": "4",
      "year": "2020",
      "cases": "124",
      "deaths": "3",
      "countriesAndTerritories": "Afghanistan",
      "geoId": "AF",
      "countryterritoryCode": "AFG",
      "popData2018": "37172386",
      "continentExp": "Asia"
    }, 

Мой текущий код, таким образом, но он не работает:

for (var i = 0; i < countriesList.length; i++) {
    dataWorldWideEuropa.sort(
        (a, b) => new Date(a.year,a.month,a.day) > new Date(b.year,b.month,b.day)
    ).map(datum => {
    // do work here
    });
}

Могу ли я легко конвертировать .day, .month и поля .year из моего ответа в Date, а затем сортировать по ним, чтобы мне не нужно было добавлять и удалять .reverse () при изменении API?

1 Ответ

0 голосов
/ 01 мая 2020

Это будет работать:

Вам просто нужно использовать .sort() в вашем массиве данных и вычислить разницу между a и b:

return new Date(a.year, a.month, a.day) - new Date(b.year, b.month, b.day);

Поскольку сортировка ожидает меньше 1 или больше, чем для определения того, находится ли один элемент впереди / позади другого (или ноль, если они эквивалентны).

const sorted = getRecords().sort((a,b) => {
  return new Date(a.year, a.month, a.day) - new Date(b.year, b.month, b.day);
});

console.log(sorted)


function getRecords(){

  return [
    { 
      "dateRep": "01/05/2020",
      "day": "1",
      "month": "5",
      "year": "2020",
      "cases": "222",
      "deaths": "4",
      "countriesAndTerritories": "Afghanistan",
      "geoId": "AF",
      "countryterritoryCode": "AFG",
      "popData2018": "37172386",
      "continentExp": "Asia"
    }, 
    { 
      "dateRep": "30/04/2020",
      "day": "30",
      "month": "4",
      "year": "2020",
      "cases": "122",
      "deaths": "0",
      "countriesAndTerritories": "Afghanistan",
      "geoId": "AF",
      "countryterritoryCode": "AFG",
      "popData2018": "37172386",
      "continentExp": "Asia"
    }, 
    { 
      "dateRep": "29/04/2020",
      "day": "29",
      "month": "4",
      "year": "2020",
      "cases": "124",
      "deaths": "3",
      "countriesAndTerritories": "Afghanistan",
      "geoId": "AF",
      "countryterritoryCode": "AFG",
      "popData2018": "37172386",
      "continentExp": "Asia"
    }
  ]
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...