无法使用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
相关产品推荐
相关产品推荐

