簡體   English   中英

Google Apps Script Calendar Service:僅獲取所有重復(全天)事件中的第一個事件

[英]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對象為值的數組。

  • 您想從 Google 日歷中檢索所有重復發生的事件和全天事件。
  • 特別是,您想要檢索重復事件的開始事件的日期對象。
  • 您想使用 Google Apps 腳本來實現這一點。

如果我的理解是正確的,這個答案怎么樣? 請將此視為幾種可能的答案之一。

改裝要點:

  • 在這種情況下,將使用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 以獲取所需的數組,其中事件標題為鍵,Date 對象為值?

由此,我無法理解您是想要數組還是對象。 所以我想提出兩種模式。 在這種情況下,我認為可以使用當前腳本的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; });

模式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; }, {});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM