У меня есть таблица с цифрами и словами. Я хочу отсортировать его, нажав на заголовок заголовка.
У меня уже была функция для сортировки чисел, но функция для слов не работает.
Я пробовал 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.