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

Vue结合Chartjs渲染数据时报Cannot read property 'position'错误

错误原因

你遇到的报错本质是数组越界访问导致的:

  • 你的for循环设置的遍历上限是1000,但后端接口返回的data数组实际长度大概率小于1000,当遍历的索引i超过data的最大索引后,data[i]会变成undefined,此时访问undefined.position就会触发该报错。
  • 之所以数据能正常显示,是因为你只需要收集28条有效数据,接口返回的数组长度足够覆盖前28次有效遍历,数据已经成功存入labels和confirmed供图表渲染,但后续的无效遍历依然会执行,所以控制台会抛出错误但功能看起来正常。
  • 额外隐藏问题:你使用data[i].position in this.labels判断值是否重复是错误逻辑,JS中in运算符针对数组时判断的是索引是否存在,而非元素值是否存在,会导致你的去重逻辑完全失效。
解决方案

调整循环逻辑,修复边界判断和去重逻辑即可,修改后的代码如下:

async created() {
  try {
    const { data } = await axios.get("http://localhost:4000/users");
    let c = 0
    // 循环上限改为接口返回数组的实际长度,避免越界访问
    for (let i = 0; i < data.length; i++) {
      // 加一层空值判断,避免后端返回异常数据导致报错
      if (!data[i] || !data[i].position) continue
      const currentPosition = data[i].position
      // 用includes方法判断值是否已存在于labels数组,实现正确去重
      if (this.labels.includes(currentPosition)) {
        continue
      }
      this.labels.push(currentPosition)
      this.confirmed.push(data[i].id)
      c += 1
      if (c === 28) break
    }
    console.log(this.labels)
  } catch (err) {
    // 新增请求异常捕获,避免接口报错导致整个钩子崩溃
    console.error('用户数据获取失败:', err)
  }
}

内容的提问来源于stack exchange,提问作者Melissa Fuentes Cañar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:06:01