Сортировка в createSelector не работает при комбинировании нескольких условий сортировки
Я использую createSelector из Redux Toolkit для фильтрации и сортировки списка пользователей. Сортировка по фамилии или ID работает нормально по отдельности, но когда я пытаюсь применить обе одновременно, одно из условий сортировки игнорируется.
import { createSelector } from "@reduxjs/toolkit";
const selectUsers = (state) => state.client.client;
const selectSearchClient = (state) => state.client.searchClient;
const selectSurnameClient = (state) => state.client.surnameSortFlag;
const selectIdClient = (state) => state.client.idSortFlag;
export const selectFilterClients = createSelector(
[selectUsers, selectSearchClient, selectSurnameClient, selectIdClient],
(users, filter, surnameSortFlag, idSortFlag) => {
const filterClients = users.filter((user) =>
user.surname.toLowerCase().includes(filter.toLowerCase())
);
const sortedClients = [...filterClients].sort((a, b) => {
if (!surnameSortFlag && !idSortFlag) {
return a.surname.localeCompare(b.surname) || a.id - b.id;
}
if (!surnameSortFlag) {
return a.surname.localeCompare(b.surname);
}
if (!idSortFlag) {
return a.id - b.id;
}
return 0;
});
return sortedClients;
}
);
Как правильно применить оба условия сортировки одновременно?
Ответы (1 шт):
Автор решения: ksa
→ Ссылка
Как правильно применить оба условия сортировки одновременно?
Сначала нужно проверить на "больше/меньше" главный критерий... При равенстве - вернуть проверку второго критерия.
Вот небольшой пример...
const a = [
{id: 5, name: 'Аня'},
{id: 1, name: 'Света'},
{id: 3, name: 'Таня'},
{id: 4, name: 'Вика'},
{id: 2, name: 'Юля'},
{id: 6, name: 'Катя'},
]
a.sort((a, b) => {
const v = a.name.localeCompare(b.name, 'ru')
return v ? v : a.id - b.id
})
console.log(a)