私はこれをたくさん扱ってきました。特に、複数のカレンダーでイベントのゲスト リスト メールを送信する場合。以下の関数は、カレンダーの配列と開始時刻と終了時刻を取り、それを一意のCalendarEvent
オブジェクトの単一の配列に変換します。
ここでコードのバージョンを実行できます。また、そこにもコメントが付けられていることがわかります。
ソートピースは、あなたが最も興味を持っていると思われるものです。それはbyStart
関数に含まれています。MDN Array.Sort Referenceで、配列の並べ替えに関する詳細情報を見つけることができます。byStart
の任意の配列に対して機能しCalendarEvent
ます。
カレンダーを管理するのはリストが多いため、Javascript で使用できる反復関数を使用すると、この作業を簡単に行うことができます。MDN には反復メソッドに関する詳細情報があります
ここにあります:
function mergeCalendarEvents(calendars, startTime, endTime) {
var params = { start:startTime, end:endTime, uniqueIds:[] };
return calendars.map(toUniqueEvents_, params)
.reduce(toSingleArray_)
.sort(byStart_);
}
function toCalendars_(id) { return CalendarApp.getCalendarById(id); }
function toUniqueEvents_ (calendar) {
return calendar.getEvents(this.start, this.end)
.filter(onlyUniqueEvents_, this.uniqueIds);
}
function onlyUniqueEvents_(event) {
var eventId = event.getId();
var uniqueEvent = this.indexOf(eventId) < 0;
if(uniqueEvent) this.push(eventId);
return uniqueEvent;
}
function toSingleArray_(a, b) { return a.concat(b) }
function byStart_(a, b) {
return a.getStartTime().getTime() - b.getStartTime().getTime();
}