[英]Google Apps Script Calendar Service: Get only the first events of all recurring (all day) events
除了這個問題,我想問一下如何有效地僅檢索所有重復(全天)事件的第一個事件。 為每個單個事件調用函數findFirstEvent()
似乎不合理。 所以我的方法是過濾所有事件的數組。
var cal=CalendarApp.getCalendarById("Calendar Id");
var startTime=new Date(1850,0,1);
var endTime=new Date();
var events=cal.getEvents(startTime, endTime);
var firstEvents=events.filter(onlyFirstEvents);
function onlyFirstEvents() {
...
}
我最終真正需要的是一個以事件標題為鍵、以Date
對象為值的數組。
如果我的理解是正確的,這個答案怎么樣? 請將此視為幾種可能的答案之一。
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 ### }, , , ]
如果我誤解了您的問題並且這不是您想要的方向,我深表歉意。
由此,我無法理解您是想要數組還是對象。 所以我想提出兩種模式。 在這種情況下,我認為可以使用當前腳本的firstEvents
。
在此模式中,返回一個數組,其中包括事件標題和開始日期對象分別是鍵和值。 請修改如下。
腳本: 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; });
在此模式中,返回一個對象,其中包括事件標題和開始日期對象分別是鍵和值。
腳本: 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; }, {});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.