Сортировка массива объектов по дате не работает правильно, игнорирует значение года - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть массив объектов для проекта, в котором они работают как записи в блоге. Затем я пытаюсь отсортировать записи по дате публикации каждой записи (сначала копирует), однако, очевидно, что функция сортировки не учитывает значение года или, возможно, какую-то другую проблему, которую я пропускаю.

Пример ситуации

Одна из записей была опубликована 23 июня (6) в 2019 году и является первым значением выходного массива, поскольку это запись с самой последней датой. НО, если я попытаюсь изменить год на что-то вроде 2005 года, он останется на вершине, как если бы функция игнорировала год. Я также попытался изменить его на 0, но результат остался прежним.

Код, который я использовал

Пример элемента в массиве объектов

На дату я использовал другой массив вкакой индекс 0 относится к Дню , индекс 1 к Месяцу и индекс 2 к Год .

[{Id: "P3", Date: [23, 6, 2019]}, ...]

Функция сортировки

Я использую три значения массивов Дата , чтобы вычислить общее количество дней с 0 дня и сравнитьих (наибольшее количество дней = самая последняя запись)

array.sort((a, b) => ((a.Date[0] + (a.Date[1] * 30) + (a.Date[2] * 365)) < (b.Date[0] + (b.Date[1] * 30) + (b.Date[2] * 365)) ? 1 : -1)).map(item => item.Id)

Функция выводит массив с Id с записями, на которые они ссылаются, предположительно, в порядке.

Любая помощь в исправлении моего кода будет полезна и ценится:)

Ответы [ 3 ]

1 голос
/ 07 ноября 2019

Попробуйте это.

function convertDateToNumber(date) {
  return Number(date[2] + date[1].toString().padStart(2, 0) + date[0].toString().padStart(2, 0));
}
var dates = [
  { Id: "P3", Date: [23, 6, 2019] },
  { Id: "P4", Date: [3, 6, 2019] },
  { Id: "P5", Date: [23, 12, 2019] },
  { Id: "P6", Date: [23, 7, 2019] },
  { Id: "P7", Date: [3, 12, 2019] }
];
dates.sort((a, b) => {
var aNumber = convertDateToNumber(a.Date);
var bNumber = convertDateToNumber(b.Date);
if (aNumber < bNumber) {
  return -1;
}
if (aNumber > bNumber) {
  return 1;
}
return 0;
});
console.log(dates);
0 голосов
/ 07 ноября 2019

Для сравнения данных даты лучше использовать Date library, например: moment.js .

0 голосов
/ 07 ноября 2019

Использовать тип данных JavaScript «Дата» вместо формата массива. Затем сравните даты для сортировки.

Измените код

[{Id: "P3", Date: [23, 6, 2019]}, ...]

на

[{Id: "P3", date: '23/6/2019'/*use proper date format*/}, ...]

С этим изменением вы можете сортировать объекты, как показано ниже

array.sort(function(a,b){
var date1 = new Date(a.date);
var date2 = new Date(b.date);
return date1 > date2? 1:-1;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...