d3.js变量未定义,但在Firefox控制台中,它可以正常工作

时间:2016-03-09 19:21:28

标签: javascript d3.js

我正在尝试读取一些csv数据,选择一个特定列(SST),并创建一个数组,其中每个项目为:{x:row#,y:SST_for_that_row}。

<script src="http://d3js.org/d3.v3.min.js"></script>
<script>

var dat=[];
d3.csv("stratus2.txt", function(t) {
dat = t;
});

f=dat.map(function(d,i) { 
return {x:i,y:d.SST} 

</script>

我的firefox控制台向我显示“dat”变量已成功加载,但“f”为空。但是,如果我直接在控制台中键入以下内容,则加载就好了。

f=dat.map(function(d,i) { 
return {x:i,y:d.SST} 

是否存在某种范围界定问题?提前致谢, 本

1 个答案:

答案 0 :(得分:2)

我认为你正在遇到问题,保留你的地图并退回你的csv回调。发生的事情是你的csv代码还没有完成(dat没有设置为t),但是回调没有阻塞(d3.csv()是异步的),所以你的javascript一直在运行,留下你用空地图。

<script src="http://d3js.org/d3.v3.min.js"></script>
<script>

var dat=[];
d3.csv("stratus2.txt", function(t) {
    dat = t;
    f=dat.map(function(d,i) { 
        return {x:i,y:d.SST};
    });
});

</script>

请尝试这种方式,并查看Javascript synchronous vs asynchronous以获取更多信息。

这在您的控制台中起作用的原因是,当您输入这些代码行时,您的回调已经处理完毕,因此dat确实有指定的值。