Как работает функция sort с датой?

const convertedDates = ['2022-03-18', '2022-03-10', '2022-03-05', '2022-03-06']

  console.log(convertedDates.sort(function(a,b){
        console.log(a,b)
        return new Date(a).valueOf() - new Date(b).valueOf()
    
       })) 

Особенно меня интересует как определятся a и b? Если написать console.log(a,b) внутри функции То Получится такое

2022-03-10 2022-03-18
2022-03-05 2022-03-10
2022-03-06 2022-03-05
2022-03-06 2022-03-10
2022-03-06 2022-03-05

Как оно работает?


Ответы (2 шт):

Автор решения: an_parubets

Любая дата в JavaScript - это количество миллисекунд, прошедших от 1 января 1970 года, а значит это значение integer.

Получается, что new Date("2022/06/12") будет меньше чем new Date("2022/07/12"), потому что до последней прошло больше миллисекунд от 1 января 1970 года.

Таким образом, сортировка массива с датами аналогична тому, как сортируются массивы с числами.

В данном примере колбек функция получает строку у виде 2022-03-10, потом из этой строки делается объект даты с помощью конструктора new Date(). Дальше происходит сортировка, описанная выше.

→ Ссылка
Автор решения: moskalenco_a

Думаю вопрос был про то, как функция sort выбирает какие элементы сравнивать. Но дело в том, что это детали реализации функции sort - какой там внутри алгоритм. Можно написать абсолютно разные сортировки, которые принимают функцию сравнения. Результат(т.е отсортированный массив) одинаковый, но алгоритмы и соответственно пары сравниваемых элементов разные. Возьмите две любые простые сортировки, ну например пузырек и выбором, очевидно элементы там сравниваются по разному.

→ Ссылка