#reactjs #typescript
Вопрос:
У меня есть следующий код сортировки, и я хочу иметь возможность сортировать значения нижнего регистра в данных, а также прямо сейчас это сортирует только значения верхнего регистра
const [data, setData] = useState<any[]>([]);
const sortCallback = (prop: string, direction: string) => (
a: object,
b: object
) => {
if (a[prop] < b[prop]) {
return direction === "asc" ? -1 : 1;
}
if (a[prop] > b[prop]) {
return direction === "asc" ? 1 : -1;
}
return 0;
};
const sortData = (prop: string, direction: string) => {
setData((data) => [...data].sort(sortCallback(prop, direction)));
directionRef.current = {
...initDirection,
[prop]: direction === "desc" ? "asc" : "desc",
};
activeRef.current = prop;
};
return { sortCallback, sortData, data, setData };
};
Ответ №1:
Я не уверен, что именно вы имеете в виду, когда говорите, что он сортирует только верхний регистр, но вы можете использовать .toLowerCase()
так, чтобы строка, которую вы пытаетесь сравнить, была в нижнем регистре.
Также я рекомендую вам попробовать использовать .localeCompare()
функцию для сравнения строк. Пример localeCompare
с toLowerCase
:
stringA.toLowerCase().localeCompare(stringB.toLowerCase())
Ответ №2:
Вы можете просто использовать метод прописных букв: https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase
Ответ №3:
Попробуйте это:
const sortCallback = (prop: string, direction: string) => (
a: object,
b: object
) => {
if (a[prop]. toLowerCase() < b[prop].toLoweCase()) {
return direction === "asc" ? -1 : 1;
}
if (a[prop].toLowerCase() > b[prop].toLowerCase()) {
return direction === "asc" ? 1 : -1;
}
return 0;
};
дайте мне знать, если это сработает