2 способа, о, подождите, есть бонусный способ

Сколько раз вам нужно отсортировать массив? Если вы фронтенд-разработчик, вы, вероятно, делаете это ежедневно. На самом деле, если вы являетесь разработчиком node js, вы, вероятно, также делаете это все время. Еще более сложной задачей может стать попытка отсортировать массив дат или объектов даты. Я собираюсь показать вам два способа сделать это: один с использованием встроенных функций javascript, а другой с использованием библиотеки под названием loadash. В обоих примерах я буду использовать moment.js — очень удобный инструмент для сравнения и форматирования дат.

Родной Javascript

Я своего рода пурист, поэтому сначала покажу вам этот метод. Когда дело доходит до использования функций javascript, мне нравится сначала пытаться сделать что-то с нативными функциями, которые нам дали создатели javascript. Я покажу вам, как это сделать, а затем объясню.

import moment from 'moment'
const dateArray = [{date:"2018-05-11"},{date:"2018-05-12"},{date:"2018-05-10"}]
const sortDates = (a, b) => moment(a.roomtypedate).format('YYYYMMDD') -moment(b.roomtypedate).format('YYYYMMDD')
const sortedDates = dateArray.sort(sortDates)
console.log(sortedDates)

Итак, вот объяснение. Во-первых, мы используем родную функцию sort. Если вы хотите узнать больше о том, как работает эта функция, ознакомьтесь с другой моей статьей о функции .sort().

Волшебство здесь, помимо функции сортировки, заключается в использовании moments способности сравнивать даты. Теперь это будет сравнивать только даты и дни, но не будет сравнивать время и минуты.

Лодаш заказОт

Если вам не нравится сортировка, вы также можете использовать функцию lodash orderBy. Это удобная функция, которую вы можете использовать для сортировки в порядке asc или desc. Это кажется немного более интуитивным, чем встроенная функция сортировки.

import moment from 'moment'
import _ from 'lodash'
const dateArray = [{date:"2018-05-11"},{date:"2018-05-12"},{date:"2018-05-10"}]
const sortedArray = _.orderBy(array, (o: any) => {
  return moment(o.date.format('YYYYMMDD');
}, ['asc']);
console.log(sortedDates)

Вот документация по этой функции. Взято с сайта документации lodash.

_.orderBy(collection, [iteratees=[_.identity]], [orders])

Этот метод похож на _.sortBy, за исключением того, что он позволяет указать порядок сортировки итераций для сортировки. Если orders не указано, все значения сортируются в порядке возрастания. В противном случае укажите порядок 'desc' для убывания или 'asc' для сортировки по возрастанию соответствующих значений.

Аргументы

  1. collection (Array|Object): коллекция для повторения.
  2. [iteratees=[_.identity]](Array[]|Function[]|Object[]|string[]): итерации для сортировки.
  3. [orders] (string[]): порядок сортировки iteratees.

Возвращает

(Array): возвращает новый отсортированный массив.

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

Бонус

Теперь, если вы хотите сравнить даты более конкретно, чем просто по дням, неделям, месяцам и годам. Вы можете попробовать этот метод. Это еще короче. Но это зависит от того факта, что эти значения в массиве уже являются объектами даты.

const sortedArray = array.sort((a, b) => a.valueOf() - b.valueOf())

Это работает, потому что объекты даты можно сравнивать путем вычитания.

Вывод

Существует множество алгоритмов сортировки значений. К счастью для нас, javascript опубликовал несколько способов сортировки. Не изобретайте велосипед.

Дайте мне знать, если у вас есть другие идеи для сортировки дат.

Удачи!

Удачного кодирования!!!

Эйвери Даффин является владельцем и основателем подкаста и блога Developers Who Lunch, помогающего тем, кто изучает программирование и хочет построить свою карьеру в сфере разработки программного обеспечения. В настоящее время работает инженером-программистом в компании Rainfocus и живет в штате Юта в США. Вы можете связаться с ним в twitter и linkedIn.