Сортировка по годам и группировка по неделям - PullRequest
0 голосов
/ 04 января 2019

У меня есть массив дат прошлого года и этого года. Я хочу сгруппировать свои данные по номеру недели и отсортировать их по годам. 3-я неделя 2019 года неправильная, и я не знаю, почему.

const test = [
    '2019-02-02T00:00:00.000Z',
    '2019-01-25T00:00:00.000Z',
    '2019-01-07T23:00:00.000Z',
    '2019-01-16T23:00:00.000Z',
    '2019-01-07T23:00:00.000Z',
    '2019-01-06T23:00:00.000Z',
    '2019-01-09T23:00:00.000Z',
    '2019-01-08T23:00:00.000Z',
    '2019-01-08T23:00:00.000Z',
    '2018-12-19T23:00:00.000Z'
];

const groupedResults = _.groupBy(test, (result) => {
  return moment.utc(result).startOf('isoWeek').format('YYYY-W');
});
console.log(groupedResults);
<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>

РЕДАКТИРОВАТЬ Неделя 3 должна быть после недели 2 (как в 2,3,4,5), а не до

1 Ответ

0 голосов
/ 04 января 2019

Неделя 3 должна быть после недели 2 (как в 2,3,4,5), а не до

Есть два вопроса:

  1. Вы ничего не сделали для сортировки результата, и входные данные не отсортированы, поэтому, естественно, результат не отсортирован.

  2. Хотя свойства объекта теперь имеют порядок (по состоянию на ES2015), некоторые операции (Object.keys, for-in) не требуются для соблюдения этого порядка. (Более того, как указывает Trincot, концептуально объекты не имеют порядка в своих свойствах, даже если они имеют механический характер.) В общем, если вы хотите использовать порядок, используйте массив, а не объект. В качестве альтернативы, если вам нужен определенный порядок и пары ключ / значение, используйте Map, который сохраняет свои записи в порядке создания (для всех операций с Map).

Если вы хотите придерживаться объекта и полагаться на порядок свойств ES2015 +, самое простое решение - отсортировать входные данные перед созданием выходных данных, чтобы свойства для недель создавались в нужном порядке (поскольку эти свойства имена не являются целочисленными индексами, поэтому они будут перечислены в порядке их создания).

Если вы переключаетесь на массив, то, естественно, вы можете легко отсортировать полученный массив так, как вам нравится.

...