Сортировка по строке iso по убыванию не работает - PullRequest
0 голосов
/ 22 сентября 2018

Требуемое поведение

Сортировать массив объектов по свойству iso_string объекта по убыванию.

Фактическое поведение

Порядок массива не изменяется.

Что я пробовал

Я, должно быть, где-то допустил простую ошибку, потому что несколько сообщений подтверждают, что правильный синтаксис sort() используется.

iso_string значение генерируется с помощью new Date().toISOString();

var dates = [{
  "formatted_date": "22/09/2018 @ 04:02pm",
  "iso_string": "2018-09-22T06:02:22.485Z"
}, {
  "formatted_date": "22/09/2018 @ 04:12pm",
  "iso_string": "2018-09-22T06:12:04.471Z"
}, {
  "formatted_date": "22/09/2018 @ 04:05pm",
  "iso_string": "2018-09-22T06:05:45.818Z"
}, {
  "formatted_date": "22/09/2018 @ 04:00pm",
  "iso_string": "2018-09-22T06:00:46.954Z"
}, {
  "formatted_date": "22/09/2018 @ 03:56pm",
  "iso_string": "2018-09-22T05:56:13.968Z"
}];

var sorted_dates = dates.sort(function(a, b) {
  return b.iso_string - a.iso_string;
});

console.log(sorted_dates);

Редактировать: Я завернул значения в new Date(), и он сортируется правильно.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Поскольку у вас есть ISO 8601 дата, которую можно отсортировать лексикографически, вы можете использовать string.localCompare() для ее сортировки.

var dates = [{ "formatted_date": "22/09/2018 @ 04:02pm", "iso_string": "2018-09-22T06:02:22.485Z" }, { "formatted_date": "22/09/2018 @ 04:12pm", "iso_string": "2018-09-22T06:12:04.471Z" }, { "formatted_date": "22/09/2018 @ 04:05pm", "iso_string": "2018-09-22T06:05:45.818Z"}, { "formatted_date": "22/09/2018 @ 04:00pm", "iso_string": "2018-09-22T06:00:46.954Z" }, { "formatted_date": "22/09/2018 @ 03:56pm", "iso_string": "2018-09-22T05:56:13.968Z" }],
    sorted_dates = dates.sort((a, b) => b.iso_string.localeCompare(a.iso_string));

console.log(sorted_dates);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 22 сентября 2018

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

var dates = [{
  "formatted_date": "22/09/2018 @ 04:02pm",
  "iso_string": "2018-09-22T06:02:22.485Z"
}, {
  "formatted_date": "22/09/2018 @ 04:12pm",
  "iso_string": "2018-09-22T06:12:04.471Z"
}, {
  "formatted_date": "22/09/2018 @ 04:05pm",
  "iso_string": "2018-09-22T06:05:45.818Z"
}, {
  "formatted_date": "22/09/2018 @ 04:00pm",
  "iso_string": "2018-09-22T06:00:46.954Z"
}, {
  "formatted_date": "22/09/2018 @ 03:56pm",
  "iso_string": "2018-09-22T05:56:13.968Z"
}];
var sorted_dates = dates.sort(function(a, b) {
  return new Date(b.iso_string) - new Date(a.iso_string);
});
console.log(sorted_dates);

Вы также можете использовать localCompare () без преобразования строки в дату.

var dates = [{
  "formatted_date": "22/09/2018 @ 04:02pm",
  "iso_string": "2018-09-22T06:02:22.485Z"
}, {
  "formatted_date": "22/09/2018 @ 04:12pm",
  "iso_string": "2018-09-22T06:12:04.471Z"
}, {
  "formatted_date": "22/09/2018 @ 04:05pm",
  "iso_string": "2018-09-22T06:05:45.818Z"
}, {
  "formatted_date": "22/09/2018 @ 04:00pm",
  "iso_string": "2018-09-22T06:00:46.954Z"
}, {
  "formatted_date": "22/09/2018 @ 03:56pm",
  "iso_string": "2018-09-22T05:56:13.968Z"
}];

var sorted_dates = dates.sort((a, b)=>b.iso_string.localeCompare(a.iso_string));
console.log(sorted_dates);
...