- Вы хотите получить все повторяющиеся события и события за весь день из календаря Google.
- Особенно, вы хотите получить объект даты начала события повторяющегося события.
- Вы хотите добиться этого с помощью Google Apps Script.
Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.
Точки модификации:
- В этом случае используются методы
isRecurringEvent()
и isAllDayEvent()
. getEvents()
возвращает события в порядке убывания. Используя это, вы получите ожидаемый результат.
Когда вышеуказанные точки отражаются в вашем скрипте, он становится следующим:
Модифицированный скрипт:
От:
var firstEvents=events.filter(onlyFirstEvents);
Кому:
var firstEvents = events.reduce(function(ar, e) {
var id = e.getId();
if (e.isRecurringEvent() && e.isAllDayEvent() && !ar.some(function(f) {return f.eventId == id})) {
ar.push({eventTitle: e.getTitle(), eventId: id, startDate: e.getAllDayStartDate(), endDate: e.getAllDayEndDate()});
}
return ar;
}, []);
Результат:
При запуске вышеуказанного сценария возвращается следующее значение.
[
{
"eventTitle": "###",
"eventId": "###",
"startDate": ### date object ###,
"endDate": ### date object ###
},
,
,
]
Ссылки:
Если я неправильно вас понял вопрос, и это было не то направление, которое вы хотите, я прошу прощения.
Добавлено:
- Таким образом, вы бы для l oop через массив результатов firstEvents, чтобы получить нужный массив с заголовки событий как ключи и объекты Date как значения?
Исходя из этого, я не могу понять, хотите ли вы массив или объект. Поэтому я хотел бы предложить 2 модели. В этом случае я подумал, что можно использовать firstEvents
текущего сценария.
Pattern 1:
В этом шаблоне массив, который включает в себя заголовки событий и дату начала Объектом являются ключ и значение, соответственно, возвращается. Пожалуйста, измените следующим образом.
Сценарий:
var firstEvents = events.reduce(function(ar, e) {
var id = e.getId();
if (e.isRecurringEvent() && e.isAllDayEvent() && !ar.some(function(f) {return f.eventId == id})) {
ar.push({eventTitle: e.getTitle(), eventId: id, startDate: e.getAllDayStartDate(), endDate: e.getAllDayEndDate()});
}
return ar;
}, []);
firstEvents = firstEvents.map(function(e) {
var obj = {};
obj[e.eventTitle] = e.startDate;
return obj;
});
Шаблон 2:
В этом шаблоне объект, который включает в себя, что названия событий и объект даты начала являются ключом и значением, соответственно , возвращается.
Сценарий:
var firstEvents = events.reduce(function(ar, e) {
var id = e.getId();
if (e.isRecurringEvent() && e.isAllDayEvent() && !ar.some(function(f) {return f.eventId == id})) {
ar.push({eventTitle: e.getTitle(), eventId: id, startDate: e.getAllDayStartDate(), endDate: e.getAllDayEndDate()});
}
return ar;
}, []);
firstEvents = firstEvents.reduce(function(obj, e) {
obj[e.eventTitle] = e.eventTitle in obj ? obj[e.eventTitle].concat(e.startDate) : [e.startDate];
return obj;
}, {});