Преобразование строки во время и его сортировка
Есть простое приложение сделанное в реакте с помощью функционального компонента. Само приложение представляет из себя таблицу, которая получает данные через json файл. Функционал приложения предусматривает возможность сортировки колонок таблицы по возрастанию/по убыванию.
Функция сортировки выглядит следующим образом
const [directionSort, setDirectionSort] = useState(true);
const sortData = (field) => {
const copyData = tableItems.concat();
let sortData;
if (directionSort) {
sortData = copyData.sort(
(a, b) => { return a[field] > b[field] ? 1 : -1 }
);
} else {
sortData = copyData.sort(
(a, b) => { return a[field] < b[field] ? 1 : -1 }
);
}
setTableItems(sortData)
setDirectionSort(!directionSort)
}
Этот код отрабатывает отлично на всех колонках, кроме одной. Есть колонка, в которой указано время, в формате "1m32s" и эти данные приходят из json в строковом формате, именно в таком виде.
"result": "1m 32s"
Соответственно, сортировка этой колонки при таком формате отрабатывает некорректно, т.к. сортировка по возрастанию даёт такой вывод:
08s
1m 15s
32s
Вопрос, как можно обработать получаемые данные, что бы выводились они в таком же формате, но сортировались корректно ? Допускается также изменить формат данных в json файле
Ответы (1 шт):
Как я понимаю, проблема связана вот с чем: во всех колонках происходит сортировка в лексикографическом порядке, то есть "по алфавиту". А в той, колонке, где записано время - такая сортировка не подходит.
Я бы предложил такое решение: у вас в коде есть участок кода, который, собственно, принимает решение "что а больше б": (a, b) => { return a[field] > b[field] ? 1 : -1 }. Нужно сделать исключение для колонки со временем, и обработать её так: преобразовать время в что то типа int (минуты * 60 + секунды) и принимать решение что "а больше б" уже на основе сравнения этих int'ов.
Там есть некотрая возня, связанная с форматом колонки со временем, но она преодолима.
Если такого объяснения недостаточно, дайте знать в комментариях: я напишу корявый код обработки строк на js