Попытка сортировки массива объектов по адресу, но сортировка снова запуталась, не знаю, как настроить мои логики c для правильной сортировки - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть компонент React / TypeScript, в котором я пытаюсь отсортировать массив объектов Location по их уличному адресу в порядке возрастания или убывания.

Сейчас у меня есть простая встроенная функция сортировки, которая сравнивает адрес улицы и в зависимости от того, был ли выбор по возрастанию (a> b) или по убыванию (b> a), он сравнивает и возвращает список в указанном порядке.

Непредвиденная проблема, с которой я столкнулся, заключается в том, что так как свойство адреса улицы возвращается в виде строки, я думаю, что числовое значение номера дома сравнивается неправильно, и поэтому мой список возвращается с, казалось бы, случайным образом упорядоченной сортировкой.

Например, в порядке возрастания будет возвращено:

13151 LAKE SHORE DR

2001 ROGER ST S

5101 SHANNON AVE S STE 2B

2001 ROGER S ST STE B2

10520 ITALY S AVE

Где ожидаемый доход, который я представлял бы, был бы всеми адресами, которые начинаются с дома номер 1, затем номер 2, 3 и т. Д.

Вот как мой вид функции выглядит прямо сейчас:

// Function for asccending order
    if (sort === 'alphaAsc') {
      filteredLocations = filteredLocations.sort((a, b) =>
        a.addressLine1 > b.addressLine1 ? 1 : 0
      );
    }


// Function for descending sort
    if (sort === 'alphaDesc') {
      filteredLocations = filteredLocations.sort((a, b) =>
        b.addressLine1 > a.addressLine1 ? -1 : 0
      );
    }

Ответы [ 2 ]

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

Для каждой функции фильтра вы хотите вернуть 1, если объект b должен предшествовать объекту a, вернуть -1, если объект a должен предшествовать объекту b, и 0, если объекты находятся в правильном порядке.

if (sort === "alphaAsc") {

  filteredLocations = filteredLocations.sort((a, b) => {

  if (a.addressLine1 < b.addressLine1) return -1;
  if (a.addressLine1 > b.addressLine1) return 1;
  return 0;

  });
};

if (sort === "alphaDesc") {

  filteredLocations = filteredLocations.sort((a, b) => {

  if (a.addressLine1 > b.addressLine1) return -1;
  if (a.addressLine1 < b.addressLine1) return 1;
  return 0;

  });
};
0 голосов
/ 21 апреля 2020

Примерно так должно работать:

// Function for asccending order
    if (sort === 'alphaAsc') {
      filteredLocations = filteredLocations.sort((a, b) =>
        a.addressLine1 > b.addressLine1 ? 1 : a.addressLine1 < b.addressLine1 ? -1 : 0
      );
    }


// Function for descending sort
    if (sort === 'alphaDesc') {
      filteredLocations = filteredLocations.sort((a, b) =>
        b.addressLine1 > a.addressLine1 ? -1 : a.addressLine1 < b.addressLine1 ? 1 : 0
      );
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...