Как работает функция 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 шт):
Любая дата в JavaScript - это количество миллисекунд, прошедших от 1 января 1970 года, а значит это значение integer.
Получается, что new Date("2022/06/12") будет меньше чем new Date("2022/07/12"), потому что до последней прошло больше миллисекунд от 1 января 1970 года.
Таким образом, сортировка массива с датами аналогична тому, как сортируются массивы с числами.
В данном примере колбек функция получает строку у виде 2022-03-10, потом из этой строки делается объект даты с помощью конструктора new Date(). Дальше происходит сортировка, описанная выше.
Думаю вопрос был про то, как функция sort выбирает какие элементы сравнивать. Но дело в том, что это детали реализации функции sort - какой там внутри алгоритм. Можно написать абсолютно разные сортировки, которые принимают функцию сравнения. Результат(т.е отсортированный массив) одинаковый, но алгоритмы и соответственно пары сравниваемых элементов разные. Возьмите две любые простые сортировки, ну например пузырек и выбором, очевидно элементы там сравниваются по разному.