Javascript 从csv(dsv)解析填充数组的问题
我对javascript非常陌生,基本上是第一次使用它来编写直方图绘图仪应用程序。我的问题是,我正在导入一个数据文件,并理想地将(部分)条目发送到一个数组中。问题是,一旦我这样做,我就很难访问数组中的条目。 我怎样才能解决这个问题?在下面张贴代码,以防有所帮助。 谢谢大家!Javascript 从csv(dsv)解析填充数组的问题,javascript,arrays,d3.js,Javascript,Arrays,D3.js,我对javascript非常陌生,基本上是第一次使用它来编写直方图绘图仪应用程序。我的问题是,我正在导入一个数据文件,并理想地将(部分)条目发送到一个数组中。问题是,一旦我这样做,我就很难访问数组中的条目。 我怎样才能解决这个问题?在下面张贴代码,以防有所帮助。 谢谢大家! let filename = 'uploads/testdata.dat'; const data_e = new Array(); d3.dsv(" ",filename, (event
let filename = 'uploads/testdata.dat';
const data_e = new Array();
d3.dsv(" ",filename, (event)=>{
data_e.push(event.mass);
return data_e
})
console.log(data_e);
哪个输出
Array []
0: "734.770828169"
1: "85.0912893849"
2: "87.383924186"
...
但是如果我想得到一个值:
console.log(数据[0])//输出:未定义
Edit1:我正在推送的值位于console.log(event.mass)
中。
输出:
Edit2:如果我在dsv函数中调用console.log(data_e),当数组被填充时,每次迭代都会得到一行,以
Array(7178) [ "734.770828169", "85.0912893849", "87.383924186", "1274.99805502", "91.5349415148", "80.2766459668", "1396.69489276", "91.5584443363", "94.52017453", "1582.29197222", … ]
这确实是我想要得到的东西。但是,如果我想将它带到函数dsv()
之外,以便获得与上面相同的输出,该怎么办
Edit3:调用console.log(JSON.stringify(event.mass))
给出:
- 再一次,每次“迭代”(我认为)一行,这是有意义的。我只想在该函数之外使用完整的数组(或者这只是一件愚蠢的事情。-。)
不要在循环内使用return
,因为这样会立即离开循环。此外,我认为d3.dsv()
是一个异步函数。这意味着此方法之外的控制台日志必须返回undefined
,因为Javascript不会等待d3.dsv()
完成。并且您的数组数据\u e
当前未定义
let data_e = new Array();
这样实例化它,您将看到,console.log()
将输出[]
,而不是未定义的
let data_e = [];
d3.dsv(" ",filename, (event)=>{
// your code
})
console.log(data_e);
实际上,我找不到一本关于在d3.dsv()
完成时如何获取触发器的手册。但从一开始,就这样尝试吧。它并不完美,但它只是想让你知道它确实有效
let filename = 'uploads/testdata.dat';
const data_e = new Array();
// run the filter
d3.dsv(" ",filename, (event)=>{
data_e.push(event.mass);
})
// wait 2 seconds, then show the array in the console
setTimeout( () => {
console.log(data_e);
}, 2000);
请提供console.log(event.mass)
的输出。如果不想显示实时数据,可以通过伪条目将其混淆。我只想检查用输出编辑的结构,它只是一系列数字数据(可能是字符串,但以后可以修复)嗯,我试过了,但我不确定这是问题所在。唯一的区别是现在我得到了一个数组array[] 0:数组[“734.770828169”] 1:数组[“85.0912893849”]代码>太恐怖了。请再做一次分析。请提供console.log(JSON.stringify(event.mass))
的输出。如果它变长了,你可以缩短字符串。重要的是前200个字符左右。只是为了更好地理解结构。使用该输出进行编辑!好的,你的问题是,d3是异步运行的。我发布了您的解决方案,只是为了表明您的数据实际上在外部可用。但不是在您的console.log()
被激发时。请试试我的演示。你会发现它是有效的。这不是完美的开始。哦,这很公平!至少这是一个好的开始,让事情变得更清楚一点。非常感谢你!
let data_e = [];
d3.dsv(" ",filename, (event)=>{
// your code
})
console.log(data_e);
let filename = 'uploads/testdata.dat';
const data_e = new Array();
// run the filter
d3.dsv(" ",filename, (event)=>{
data_e.push(event.mass);
})
// wait 2 seconds, then show the array in the console
setTimeout( () => {
console.log(data_e);
}, 2000);