Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从csv(dsv)解析填充数组的问题_Javascript_Arrays_D3.js - Fatal编程技术网

Javascript 从csv(dsv)解析填充数组的问题

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

我对javascript非常陌生,基本上是第一次使用它来编写直方图绘图仪应用程序。我的问题是,我正在导入一个数据文件,并理想地将(部分)条目发送到一个数组中。问题是,一旦我这样做,我就很难访问数组中的条目。 我怎样才能解决这个问题?在下面张贴代码,以防有所帮助。 谢谢大家!

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);