[英]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.