You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改JavaScript循环获取Google Calendar中火箭的下一个发射事件

解决方案:保留火箭最早的未发生发射事件

问题核心

当前代码遍历所有发射事件时,会用后续同火箭的事件日期覆盖之前的记录,导致arrElements中最终存储的是该火箭最后一个事件的日期。而Google Calendar API返回的事件已经通过orderBy: 'startTime'按时间升序排序,只需利用这一特性,确保每个火箭只保留第一个匹配的事件日期即可。

修改代码

只需修改setEventDate函数,添加仅当火箭未设置日期时才赋值的判断:

function setEventDate(eventname, eventdate) {
  for (var i = 0; i < arrElements.length; i++) {
    // 仅当火箭未设置日期且事件名称匹配时,才更新日期
    if (eventname.search(arrElements[i].name) !== -1 && arrElements[i].eventdate === "") {
      arrElements[i].eventdate = eventdate;
    }
  }
}

原理说明

API返回的事件是按时间从早到晚排序的,遍历事件时,第一个匹配到对应火箭的事件就是它的下一个即将到来的发射。添加arrElements[i].eventdate === ""的判断后,该火箭的日期被设置一次后,后续同火箭的事件不会再覆盖这个值,从而保留最早的未发生事件日期。

完整修改后的相关代码片段

var arrElements = [
  { "name": "Electron", "eventdate": "" },
  { "name": "Falcon 9 B5", "eventdate": "" },
  { "name": "New Shepard", "eventdate": "" },
  { "name": "SpaceShipTwo", "eventdate": "" },
  { "name": "Gaofen 14", "eventdate": "" }
];

function setAllEvenDates(arrEvents) {
  for (var i = 0; i < arrEvents.length; i++) {
    setEventDate(arrEvents[i].name, arrEvents[i].eventdate);
  }
}

function setEventDate(eventname, eventdate) {
  for (var i = 0; i < arrElements.length; i++) {
    if (eventname.search(arrElements[i].name) !== -1 && arrElements[i].eventdate === "") {
      arrElements[i].eventdate = eventdate;
    }
  }
}

内容的提问来源于stack exchange,提问作者Cesare Mannino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:10:37