#javascript #sorting
#javascript #сортировка
Вопрос:
Я действительно просто хочу отсортировать этот список словарей (из мира Python) или объектов здесь.
{Rank: "1", PAX name: "Ito", Best time: "1:22:16", Age: "49", Total halves run: "1", …}
2: {Rank: "", PAX name: "Zook", Best time: "99:00:00", Age: "38", Total halves run: "", …}
3: {Rank: "", PAX name: "Pink", Best time: "99:00:00", Age: "49", Total halves run: "", …}
4: {Rank: "", PAX name: "Coxswain", Best time: "99:00:00", Age: "16", Total halves run: "", …}
5: {Rank: "3", PAX name: "Shake It", Best time: "1:29:53", Age: "33", Total halves run: "1", …}
6: {Rank: "", PAX name: "Fresh Prince", Best time: "99:00:00", Age: "29", Total halves run: "", …}
7: {Rank: "2", PAX name: "Sweats", Best time: "1:25:04", Age: "40", Total halves run: "1", …}
8: {Rank: "", PAX name: "Cardiac", Best time: "99:00:00", Age: "37", Total halves run: "", …}
9: {Rank: "", PAX name: "Dial Up", Best time: "99:00:00", Age: "32", Total halves run: "", …}
В основном я хочу отсортировать по лучшему времени.
Я пробовал что-то вроде этого->
data.sort(function(a,b) {
return a['Best time'] - b.['Best time']
});
console.log(data);
Я получаю сообщение об [
ошибке «не имеет смысла», поэтому я просто застрял …. и слишком устал, чтобы больше ясно мыслить
Комментарии:
1. Что это за сообщение об ошибке? Вы всегда должны добавлять сообщение об ошибке в сообщение.
2. Вы также вычитаете две строки, что не имеет смысла.
console.log("1:22:16" - "99:00:00")
3. Это должно быть
b['Best time']
вместоb.['Best time']
4. используйте
a['Best time'].padStart(8, '0').localeCompare(b['Best time'].padStart(8, '0'))
Ответ №1:
Я не знаю, каков формат вашего «лучшего времени», но, как я вижу, его тип — строка, и вы не можете использовать строку как число или тип даты.
Мое решение: преобразовать лучшие времена в наименьшие фрагменты (например, секунды), так что, например, если ваш формат hh: mm: ss, у вас может быть что-то вроде этого:
const totalTime = ss (mm * 60) (hh * 3600)
а затем сравнить их.
Также для получения этих чисел (hh, mm, ss) из строки на каждой итерации цикла вы можете использовать функцию substring() для выбора числовой части и parseInt() для преобразования ее в число