Группировка и упорядочивание транзакций по годам

Для корректных дат YYYY-MM-DD строковая сортировка совпадает с календарной. Отсортируйте копию массива и сгруппируйте MM-DD по первым четырём символам даты.

Короткий ответ

Что ответить на собеседовании

Для корректных дат YYYY-MM-DD строковая сортировка совпадает с календарной. Отсортируйте копию массива и сгруппируйте MM-DD по первым четырём символам даты.

Подробный разбор

Ответ с пояснениями

Условие

Реализуйте функцию, принимающую массив транзакций, отсортируйте их по дате и сформируйте объект, где ключами выступают годы, а значениями — массивы дат в формате "MM-DD".

result = {
  '2017': ['07-31', '08-22'],
  '2018': ['01-01', '02-22'],
};
const operations = [
  { date: '2017-07-31', amount: '5422' },
  { date: '2017-08-22', amount: '5423' },
  { date: '2018-01-01', amount: '5422' },
  { date: '2018-02-22', amount: '5422' },
];

Ответ

Для корректных дат YYYY-MM-DD строковая сортировка совпадает с календарной. Отсортируйте копию массива и сгруппируйте MM-DD по первым четырём символам даты.

function groupOperations(operations) {
  const result = Object.create(null);
  const sorted = [...operations].sort((a, b) => a.date < b.date ? -1 : a.date > b.date ? 1 : 0);
  for (const { date } of sorted) {
    (result[date.slice(0, 4)] ??= []).push(date.slice(5));
  }
  return result;
}

Поля amount не участвуют, повторы дат сохраняются. Предполагаются валидные даты строго фиксированной ширины; форматы вроде 2017-7-1 требуют нормализации. Сложность O(n log n), память O(n). Если важен явный порядок обхода годов как записей, можно вернуть Map либо массив групп.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее