как мне отсортировать список объектов (список диктонариев) в javascript?

#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() для преобразования ее в число