我正在尝试读取一些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}
是否存在某种范围界定问题?提前致谢, 本
答案 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
确实有指定的值。