Javascript Google Apps脚本日历服务:仅获取所有重复(全天)事件的第一个事件

Javascript Google Apps脚本日历服务:仅获取所有重复(全天)事件的第一个事件,javascript,arrays,google-apps-script,calendar,Javascript,Arrays,Google Apps Script,Calendar,除此之外,我想问一下如何有效地只检索所有重复(全天)事件中的第一个事件。为每个事件调用函数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 firstE

除此之外,我想问一下如何有效地只检索所有重复(全天)事件中的第一个事件。为每个事件调用函数
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日历中检索所有定期事件和全天事件
  • 特别是,您希望检索定期事件的开始事件的日期对象
  • 您希望使用谷歌应用程序脚本实现这一点
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

修改点:
  • 在这种情况下,将使用
    isRecurringEvent()
    isAllDayEvent()
    的方法
  • getEvents()
    以降序返回事件。使用此选项,将检索您期望的结果
当上述各点反映到脚本中时,它将变成如下所示

修改脚本: 发件人: 致: 结果: 当运行上述脚本时,将返回以下值

[
  {
    "eventTitle": "###",
    "eventId": "###",
    "startDate": ### date object ###,
    "endDate": ### date object ###
  },
,
,

]
参考资料:
如果我误解了你的问题,而这不是你想要的方向,我道歉

补充:
  • 因此,您希望for循环遍历结果数组firstEvents,以获得所需的数组,其中事件标题作为键,日期对象作为值
因此,我无法理解您是想要数组还是对象。所以我想提出两种模式。在本例中,我认为可以使用当前脚本的
firstEvents

模式1: 在此模式中,返回一个数组,其中包括事件标题和开始日期对象分别是键和值。请修改如下

脚本: 模式2: 在这个模式中,返回一个对象,其中事件标题和开始日期对象分别是键和值

[
  {
    "eventTitle": "###",
    "eventId": "###",
    "startDate": ### date object ###,
    "endDate": ### date object ###
  },
,
,

]
脚本:
你的回答非常简洁。非常感谢你!
getEvents()
是否按升序返回事件?因此,您将
for
循环遍历结果数组
firstEvents
,以获得所需的数组,其中事件标题作为键,
Date
对象作为值?@Ben感谢您的回复并指出我的英语。我想我可能误解了“上升”和“下降”。我想说
getEvents()
检索到的数组的第一个索引是最早的事件。我为我糟糕的英语水平深表歉意。关于所需的数组,事件标题作为键,日期对象作为值,我更新了答案。你能确认一下吗?如果这不是你想要的方向,我再次道歉。事实上,我指的不是你的英语,而是你精心安排的回答形式以及你的礼貌。但无论如何,你的英语可能比我的好得多。由于第一个事件是最古老的,我会将其称为升序,但这可能是一个意见问题。模式1很好。非常感谢你!顺便说一句,根本不需要道歉。:)@本:谢谢你的回复。我很高兴你的问题解决了。我也可以从你的问题中学习。也谢谢你。似乎
firstEvents
不仅包含事件系列的第一个事件,而且还包含(当前)最后一个事件!?
[
  {
    "eventTitle": "###",
    "eventId": "###",
    "startDate": ### date object ###,
    "endDate": ### date object ###
  },
,
,

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