Для корректных дат 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 либо массив групп.