Сортировка массива с элементами Момент (дата) - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть массив, который заполняется элементами момент (дата предоставлена ​​базой данных). Я пытаюсь отсортировать массив так, чтобы первый элемент был самым старым, а последний - самым новым, но безуспешно.

     for (let item of items) {

            dates.push(moment(item.created));
          }
          dates.sort(function(a,b){
            var da = new Date(a).getTime();
            var db = new Date(b).getTime();

            return da < db ? -1 : da > db ? 1 : 0
          });
    }
  console.log(dates);

Это всегда печатает текущее время умноженное на количество элементов.

1 Ответ

0 голосов
/ 12 ноября 2018

Это намного проще, чем вы думаете. :-) Когда вы используете - для операндов, которые являются экземпляром Moment, они приводятся к числам, которые являются их значением в миллисекундах с начала эпохи. Итак:

dates.sort((a, b) => a - b);

... сортирует их по возрастанию (сначала самые ранние даты), а

dates.sort((a, b) => b - a;

... сортирует их по убыванию (сначала самые последние даты).

Я с радостью использовал там краткие функции стрелок, поскольку вы уже используете функции ES2015 + в своем коде.

Пример:

let dates = [
  moment("2017-01-12"),
  moment("2018-01-12"),
  moment("2017-07-12"),
  moment("2016-07-30")
];
dates.sort((a, b) => a - b);
console.log(dates);

dates = [
  moment("2017-01-12"),
  moment("2018-01-12"),
  moment("2017-07-12"),
  moment("2016-07-30")
];
dates.sort((a, b) => b - a);
console.log(dates);
.as-console-wrapper {
  max-height: 100% !important;
}
The built-in Stack Snippets console shows Moment instances by calling toString, which shows is the ISO date string. But they're Moment instances (you can see that in the browser's real console).
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
...