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

无法使用for循环为FullCalendar填充数组,求修复方案

修复FullCalendar数据填充的JavaScript代码错误

你这段代码报错的核心原因很明确:JavaScript不允许在数组字面量[]内部直接编写for循环语句,这属于语法错误,浏览器根本无法解析这种写法。

我给你两种修复方案,都能顺利生成FullCalendar需要的events数组:

方案一:使用数组push方法(传统循环写法)

把颜色判断和事件对象创建合并到同一个循环里,直接将每个事件推入数组,逻辑清晰易懂:

var events = [];

for(var i = 0; i < data.length; i++){
    // 先确定当前事件的颜色
    var eventColor;
    const statusId = data[i]['hour_status_id'];
    if(statusId === "1" || statusId === "2" || statusId === "3"){
        eventColor = "red";
    } else if(statusId === "0"){
        eventColor = "blue";
    } else {
        // 可选:给未匹配的状态设置默认颜色,避免颜色为空
        eventColor = "gray";
    }

    // 将事件对象添加到events数组
    events.push({
        id: data[i]['medical_agenda_id'],
        start: `${data[i]['date']}T${data[i]['time_start']}`, // 模板字符串拼接更简洁
        end: `${data[i]['date']}T${data[i]['time_end']}`,
        color: eventColor
    });
}

方案二:使用数组map方法(更简洁的现代写法)

利用map方法遍历数据源,直接生成目标数组,代码更紧凑易读:

const events = data.map(item => {
    let color;
    const statusId = item.hour_status_id;
    if(["1", "2", "3"].includes(statusId)){
        color = "red";
    } else if(statusId === "0"){
        color = "blue";
    } else {
        color = "gray";
    }

    return {
        id: item.medical_agenda_id,
        start: `${item.date}T${item.time_start}`,
        end: `${item.date}T${item.time_end}`,
        color: color
    };
});

额外说明

原来的代码里单独维护color_hour数组其实没必要,直接在处理每个事件时确定颜色,既能减少不必要的变量,也能避免数组索引不匹配的潜在问题。

内容的提问来源于stack exchange,提问作者Ricardo Javier Chavarra Gonzal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:41:14