Почему Code Snippet 1 работает, а Code Snippet 2 не работает?
Поскольку обратный вызов выполняется несколько раз, а возвращаемый вами new Map
становится ar
значение аккумулятора в следующем вызове.
Как бы я правильно сократил фрагмент кода 1?
Чтобы сделать это одно выражение, вы должны использовать
const firstEvents = new Map(events.reduce(…).map(…));
Но на самом деле правильным решением было бы вовсе не использовать reduce
и push
, а просто map
и filter
. Чтобы удалить дубликаты идентификаторов, следите за ними в Set
, или, что еще лучше, просто введите другую карту:
const firstEventsById = new Map(events.filter(e =>
e.isRecurringEvent() && e.isAllDayEvent()
).map(e => {
var id = e.getId();
return [id, {
eventTitle: e.getTitle(),
// eventId: id,
startDate: e.getAllDayStartDate(),
// endDate: e.getAllDayEndDate()
}];
}).reverse());
const startDatesByTitle = new Map(Array.from(firstEventsById.values(), entry =>
[entry.eventTitle, entry.startDate]
));