lodash - даты заказа с пропущенным значением года - PullRequest
0 голосов
/ 26 декабря 2018
var dates = ['2017-02-01', '2017-01-01', '2016-02-03', '2018-02-02', '2014-12-25'];
var orderedDates = dates.sort(); // ['2017-01-01', '2017-02-01', '2018-02-02', '2016-02-03', '2014-12-25']

У меня есть коллекция дат (объектов момента) из разных годов.Мне нужно отсортировать эти даты только по формату 'ddMM' (например, пропустить годы).

Есть ли способ сделать это?

создать копию массива dates, установить один и тот же год для всех дат - не похоже на хорошее решение.

для сортировки используйте lodash .orderBy

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Вы должны использовать формат 'MMDD', а не 'DDMM'.

И нет необходимости преобразовывать его обратно в мгновение, так как это просто для сортировки массива.

var orderedDates = _.orderBy(dates, e => moment(e).format('MMDD'));
0 голосов
/ 26 декабря 2018

Вы можете использовать orderBy с массивом функций, которые задают желаемый порядок (где функции получают date и month от объекта moment):

const date = (s) => moment(s, 'YYYY-MM-DD');
const dates = [date('2017-02-01'), date('2017-01-01'), date('2016-02-03'), date('2018-02-02'), date('2014-12-25')];

const result = _.orderBy(dates, [m => m.date(), m => m.month()]);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
...