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

学习d3.js时调用.data()方法报变量data未定义问题求助

报错原因

d3.csv是异步网络请求方法,你代码里的data变量仅在.then()的回调函数作用域内可访问,你把.data(data)这段逻辑写在了回调函数外部,自然会抛出变量未定义的错误,和d3的.data()方法本身无关。
你之前能在控制台成功打印数据,是因为打印语句写在了回调内部,请求成功返回数据后才会执行打印,而外部的代码在请求还未完成时就已经提前执行了。

修复方法
  • 方案1:把所有依赖data的图表逻辑全部移入.then()回调内部
d3.csv("data/HousePricesAroundtheWorld.csv").then((data) => {
  data.forEach((d) => {
    d.number = Number(d["annual percent change"]);
  });
  console.log(data);
  // 所有用到data的逻辑都放在回调里
  const circles = svg.selectAll("circles").data(data);
  // 后续的enter、属性赋值、事件绑定等图表逻辑也写在这里
});
  • 方案2:用async/await语法简化异步流程,避免回调嵌套
// 把图表初始化逻辑封装为async函数
async function renderChart() {
  // await等待异步请求返回数据后再执行后续逻辑
  const data = await d3.csv("data/HousePricesAroundtheWorld.csv");
  data.forEach((d) => {
    d.number = Number(d["annual percent change"]);
  });
  const circles = svg.selectAll("circles").data(data);
  // 其他图表逻辑
}
// 调用初始化函数
renderChart();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:45:03