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

使用$getJSON和ChartJS创建图表时提取数据出现undefined错误如何解决

问题原因
  • 内层循环条件错误:你当前内层循环的判断条件为j < i,完全不符合遍历delays子数组的逻辑,正确逻辑应该是遍历每个外层元素对应的delays数组的全部元素,循环条件应为j < data[i].delays.length。原写法会触发两种异常:i=0时内层循环完全不执行,i≥1时如果delays数组长度小于i,就会访问到不存在的数组元素,触发undefined报错。
  • 数据类型未做兼容:你提供的JSON中Arrival字段存在字符串类型的值(比如"3"、"no information"),如果直接传入ChartJS作为Y轴数值会导致渲染异常,需要额外做合法性校验和类型转换。
正确实现代码
var dataPoints = [];

function addData(data) {
    // 清空原有数据,避免重复请求时数据叠加
    dataPoints = [];
    for (var i = 0; i < data.length; i++) {
        // 取当前外层元素对应的delays子数组
        var delayList = data[i].delays;
        // 内层循环遍历整个delays子数组
        for (var j = 0; j < delayList.length; j++) {
            var currentItem = delayList[j];
            // 转换Arrival为数值类型,过滤非法值
            var arrivalVal = Number(currentItem.Arrival);
            if (!isNaN(arrivalVal)) {
                dataPoints.push({
                    x: currentItem.Station,
                    y: arrivalVal
                });
            }
            // 若需保留无到站信息的站点,可替换上面的判断逻辑为:
            // y: isNaN(arrivalVal) ? null : arrivalVal
        }
    }
    console.log(dataPoints);
    chart.render();
}

$.getJSON(url, addData);
补充说明

如果需要保留Arrival为no information的站点,调整校验逻辑将非法值设为null即可,ChartJS会自动跳过该点渲染或按配置展示为空。所有字符串格式的数字会被统一转为数值类型,避免Y轴出现字符串排序异常的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 11:48:01