Сортировка массива объектов в JavaScript по дате

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

При сортировке массива объектов в JavaScript обычно используется метод sort(), который сравнивает объекты Date, созданные на основе строковых представлений дат, обеспечивая таким образом точность сортировки.

JS
Скопировать код
const array = [{ dateKey: '2021-01-01' }, { dateKey: '2020-01-01' }];
array.sort((a, b) => new Date(a.dateKey) – new Date(b.dateKey));

Приведенный выше пример отсортирует массив по возрастанию дат. Чтобы отсортировать данные по убыванию, поменяйте местами a и b.

Сортировка дат в JavaScript: внимание к деталям

Сортировка дат в JavaScript имеет свои особенности, среди которых форматы дат и учет часовых поясов. Именно поэтому важно обратить внимание на производительность при работе с большими объемами данных.

Форматы дат: для ясности и единообразия

Рекомендуется привести даты к формату ISO 8601 (YYYY-MM-DD), чтобы избежать недоразумений, несмотря на то, что объект Date способен обрабатывать разнообразие форматов.

JS
Скопировать код
// Предпочтительный формат даты ISO 8601
const array = [{ dateKey: '2021-01-01T00:00:00Z' }, { dateKey: '2020-01-01T00:00:00Z' }];

Если данные не единообразны, то нормализация перед сортировкой значительно упрощает процесс.

Часовые пояса и переход на летнее время: исправляем ошибки

Важно учесть часовые пояса и переход на летнее время, для чего отлично подходит работа с временем в формате UTC.

JS
Скопировать код
// Конвертация в UTC перед сортировкой
array.sort((a, b) => 
  new Date(a.dateKey).getTime() – new Date(b.dateKey).getTime());

Этот код использует Unix-временные метки, которые не подвержены ошибкам, связанным с переходом на летнее время.

Большие наборы данных: достигаем максимальной производительности

Для ускорения работы с большими наборами данных целесообразно использовать сторонние библиотеки, такие как lodash или underscore.

JS
Скопировать код
// Функция sortBy от Lodash для повышения производительности
const sortedArray = _.sortBy(array, (element) =>
  new Date(element.dateKey).getTime());

Неизменная сортировка: защищаем исходные данные

Чтобы не изменять исходный массив, используйте оператор расширения ... или большие библиотеки, предлагающие функции для работы с неизменяемыми данными.

JS
Скопировать код
// Использование оператора расширения для защиты исходного массива
const sortedArray = [...array].sort((a, b) => 
  new Date(a.dateKey) – new Date(b.dateKey));

Чистота кода: Ваше будущее «Я» скажет спасибо

Используйте стрелочные функции из ES6 для упрощения и повышения читабельности функций сортровки. Чистый и понятный код гораздо проще поддерживать.

JS
Скопировать код
// Концентрированный синтаксис стрелочной функции
array.sort((a, b) => +new Date(a.dateKey) – +new Date(b.dateKey));
// Унарный плюс перед new Date приводит результат к числу.

Поддержка старых браузеров: переход в прошлое

Если ваш код должен поддерживать работу в старых браузерах, используйте Babel для транспиляции вашего кода из ES6 в ES5.

Визуализация

Сортировка по дате подобна упорядоченной хронологии событий:

Несортированные события: [🎉📅2021, 🎓📅2019, 🚀📅2020]
JS
Скопировать код
events.sort((a, b) => new Date(a.date) – new Date(b.date));
// Высказывание Доктора Кто вполне справедливо
Процесс сортировки: 🔀⏳📈
Отсортированные события: [🎓📅2019, 🚀📅2020, 🎉📅2021]

Соответственно, каждое событие связывается с конкретной датой, создавая последовательный хронологический ряд от прошлого к будущему.

Практические ситуации и решения

Определенные методы могут помочь вам решить вопросы сортировки массивов с датами в разных форматах, оптимизации этого процесса, а также обеспечить корректную работу с разной локализацией.

Моя дата носит множество масок

Если даты в массиве представлены в различных форматах, стандартизируйте их перед проведением сортировки.

Функции высшего порядка: уровень мастерства

Функции высшего порядка могут быть полезны в ситуациях, когда требуется сложная сортировка, такая как сначала по дате, а затем по другому свойству.

Даты в разных локалях

Учитывайте локальные предпочтения в форматах дат и времени при сортировке и представлении данных для пользователей из различных регионов.

Полезные материалы

  1. Array.prototype.sort() – JavaScript | MDN — детальное руководство по использованию метода sort().
  2. Окончательное руководство по датам в JavaScript — обширный обзор всеобъемлющего взаимодействия с датами в JavaScript.
  3. javascript – Сортировка массива объектов по строковому значению свойства – Stack Overflow — обсуждение на Stack Overflow с примерами сортировки массивов объектов.
  4. Дата и время — доступное руководство по работе с датой и временем в JavaScript.
  5. ISO – ISO 8601 – Формат даты и времени — информация о международном стандарте даты и времени ISO 8601.
  6. Возможно вам не нужен Moment.js — аргументы в пользу использования встроенных функций JS Date вместо библиотеки Moment.js.
  7. Как отсортировать массив дат в JavaScript · GitHub — пример кода для сортировки дат на GitHub Gist.