Группируйте даты по месяцам и сортируйте по убыванию, используя lodash и момент - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть следующий массив, содержащий объект JSON, определенный ниже

[
{
    "modDate": "2017-06-20"
},
{
    "modDate": "2017-10-24"
},
{
    "modDate": "2017-08-03"
}
]

и я хочу, чтобы результат был сгруппирован на первом месте по месяцам, а затем отсортирован по убыванию по месяцам.

Я пытался сгруппировать его с этим

grouped_items = _.groupBy(data, (b) ->
  moment(b.modDate).startOf('month').format('YYYY/MM')

но я не получаю правильный результат.

1 Ответ

0 голосов
/ 26 апреля 2018

Если я вас правильно понял, вы хотите создать сгруппированную коллекцию данных по месяцам, а затем отсортировать значения по убыванию по дням месяца (поскольку сортировка по месяцам в значениях не имеет смысла).

Если это так, должно работать следующее:

const data = [{"modDate":"2017-06-20"},{"modDate":"2017-06-25"},{"modDate":"2017-10-24"},{"modDate":"2017-10-20"},{"modDate":"2017-08-03"}];

let grouped_items = _.groupBy(data, (b) =>
  moment(b.modDate).startOf('month').format('YYYY/MM'));

_.values(grouped_items)
  .forEach(arr => arr.sort((a, b) => moment(a.modDate).day() - moment(b.modDate).day()));

console.log(grouped_items);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js"></script>
...