Сортировка таблицы по алфавиту - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть таблица с цифрами и словами. Я хочу отсортировать его, нажав на заголовок заголовка.

У меня уже была функция для сортировки чисел, но функция для слов не работает.

Я пробовал localeCompare и сортировал функцию следующим образом:

data2.sort((a, b) => {
      if (a[id] < b[id]) return -1;
      if (a[id] > b[id]) return 1;
      return 0;

функция localCompare:

sortowanieNazwy = (id) => {
    const { data2} = this.state;

    data2.sort((a, b) => a[id].localeCompare(b[id]))
    this.setState({ data2 })

  }

Я получаю данные из API следующим образом:

axios
    .get("http://localhost/api?", {params : {rok : this.state.rok, }, headers: { 'Authorization' : 'Bearer '+ this.state.token }})
    .then(response =>
      response.data.map(data2 => ({
        IDA: `${data2.id}`,
        Pozycja: `${data2.pozycja}`,
        ...

      }))
    )
    .then(data2 => {
        this.setState({ data2 });
      }
    })
}

и изготовление стола:

data2.map(user => {
  const { IDA...} = user;
  return (
     <>
     <tr id={IDA}>
        <td ><p>{Dzial}</p></td>
        ...

     </tr>

Функция localeCompare работает на 90%, первые 2/3 строки сортируются некорректно. Я сортирую красную колонну. Первый ряд 3 пустой, затем текст, начинающийся с D, затем текст, начинающийся с Z, а затем оставшаяся часть таблицы сортируется правильно.

Таблица

После сортировки я отображаю таблицу с помощью функции .map

Я из Польши, поэтому нужно сортировать и польские буквы. Я использую UTF-8.

1 Ответ

0 голосов
/ 23 апреля 2019

localeCompare отлично работает:

const alphabet = _.shuffle(['a', 'ą', 'b', 'c', 'ć', 'd', 'e', 'ę', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'ł', 'm', 'n', 'ń', 'o', 'ó', 'p', 'r', 's', 'ś', 't', 'u', 'w', 'y', 'z', 'ź', 'ż'])
console.log('Shuffled: ', alphabet.toString())

alphabet.sort((a, b) => a.localeCompare(b))
console.log('Sorted: ', alphabet.toString())
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...