Список упорядочения по JavaScript в порядке убывания - PullRequest
0 голосов
/ 03 марта 2019

Даты выглядят так:

[‘Oct 7, 2009’, ‘Nov 10, 2009’, ‘Jan 10, 2009’, ‘Oct 22, 2009’, …]

Месяц - это всегда первые три символа полного названия месяца («Январь» => «Январь», «Февраль» => «Фев»,…).

День состоит из одной или двух цифр (1, 2,… 31), без предшествующего нуля.

После дня всегда есть запятая.Год всегда состоит из четырех цифр.

Я пытаюсь написать функцию, которая будет упорядочивать этот список строк по дате в порядке убывания

Это то, что у меня сейчас:

let dates = [
'Oct 7, 2009',
'Nov 10, 2009',
'Jan 10, 2009',
'Oct 22, 2009'
]

let sortDate = function (date1, date2) {
  if (date1 > date2) return -1
  if (date1 < date2) return 1
  return 0
}

dates.sort(sortDate)

for (let i = 0; i < dates.length; i++) {
  document.write(i + ': ' + dates[i])
}

Выводхотя это показывает:

0: Oct 7, 2009
1: Oct 22, 2009
2: Nov 10, 2009
3: Jan 10, 2009

Январь должен быть первым.

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

В вашем обратном вызове sort верните разницу дат, выраженную в эпохах (количество миллисекунд).Для этого вы можете использовать Date.parse:

    return Date.parse(date1) - Date.parse(date2);

let dates = ['Oct 7, 2009', 'Nov 10, 2009', 'Jan 10, 2009', 'Oct 22, 2009'];

let sortDate = function (date1, date2) {
  return Date.parse(date1) - Date.parse(date2);
}

dates.sort(sortDate)

for (let i = 0; i < dates.length; i++) {
  console.log(i + ': ' + dates[i])
}
0 голосов
/ 03 марта 2019

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

dates.map(date => {
  arr = date.match(/([a-zA-Z]{3}) ([0-9]{1,2}), ([0-9]{4})/);
  return new Date(arr[3], months.indexOf(arr[1]), arr[2]);
});

Где dates - ваш массив дат, а months - упорядоченный массив месяцев.

А затем в вашей функции сравнения сравните date.valueOf(), то есть дату, представленнуюв миллисекундах с эпохи Unix

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