Javascript-无法访问从csv文件创建的数组的数组元素
我需要将数据库生成的csv文件中的数据放入数组中。我下载了该文件,并将其放入与脚本相同的文件夹中 csv文件的格式如下:(很遗憾,我无法显示原始数据) 我找到了用于从csv文件导入数据的d3脚本。 我要导入的代码如下所示:Javascript-无法访问从csv文件创建的数组的数组元素,javascript,arrays,csv,d3.js,Javascript,Arrays,Csv,D3.js,我需要将数据库生成的csv文件中的数据放入数组中。我下载了该文件,并将其放入与脚本相同的文件夹中 csv文件的格式如下:(很遗憾,我无法显示原始数据) 我找到了用于从csv文件导入数据的d3脚本。 我要导入的代码如下所示: var myArray= [] d3.csv("data.csv", function(data){ myArray.push(data) }); console.log(myArray) 0: { "HeaderA": "A1", "HeaderB": "
var myArray= []
d3.csv("data.csv", function(data){
myArray.push(data)
});
console.log(myArray)
0: { "HeaderA": "A1", "HeaderB": "B1", "HeaderC": "C1", … }
1: { "HeaderA": "A2", "HeaderB": "B2", "HeaderC": "C2", … }
2: { "HeaderA": "A3", "HeaderB": "B3", "HeaderC": "C3", … }
var parsedArray = [
{ "HeaderA": "A1", "HeaderB": "B1", "HeaderC": "C1" },
{ "HeaderA": "A2", "HeaderB": "B2", "HeaderC": "C2" },
{ "HeaderA": "A3", "HeaderB": "B3", "HeaderC": "C3" }
];
因此,现在我可以使用控制台命令“myArray”在控制台中显示数组。
看起来像这样:
var myArray= []
d3.csv("data.csv", function(data){
myArray.push(data)
});
console.log(myArray)
0: { "HeaderA": "A1", "HeaderB": "B1", "HeaderC": "C1", … }
1: { "HeaderA": "A2", "HeaderB": "B2", "HeaderC": "C2", … }
2: { "HeaderA": "A3", "HeaderB": "B3", "HeaderC": "C3", … }
var parsedArray = [
{ "HeaderA": "A1", "HeaderB": "B1", "HeaderC": "C1" },
{ "HeaderA": "A2", "HeaderB": "B2", "HeaderC": "C2" },
{ "HeaderA": "A3", "HeaderB": "B3", "HeaderC": "C3" }
];
当我打开阵列时,可以看到如下格式的服务器对象:
var myArray= []
d3.csv("data.csv", function(data){
myArray.push(data)
});
console.log(myArray)
0: { "HeaderA": "A1", "HeaderB": "B1", "HeaderC": "C1", … }
1: { "HeaderA": "A2", "HeaderB": "B2", "HeaderC": "C2", … }
2: { "HeaderA": "A3", "HeaderB": "B3", "HeaderC": "C3", … }
var parsedArray = [
{ "HeaderA": "A1", "HeaderB": "B1", "HeaderC": "C1" },
{ "HeaderA": "A2", "HeaderB": "B2", "HeaderC": "C2" },
{ "HeaderA": "A3", "HeaderB": "B3", "HeaderC": "C3" }
];
等等
我的问题:
myArray[0]
时,我可以看到第一个对象(如上面的0),但我无法访问其中的元素(A1、B1、C1…),为什么?/HowmyArray[0]
,例如循环对象。我收到错误消息:“引用错误:未定义数组”谢谢:)可能既不是最快的,也不是最有效的解决方案,但以下是您可以执行的操作,以获得所需的格式,分为多个步骤:
- 设置一组唯一键,以便您知道需要使用哪些键
- 映射上述键并从原始数组中获取该键的所有值
var myArray= []
d3.csv("data.csv", function(data){
myArray.push(data)
});
console.log(myArray)
0: { "HeaderA": "A1", "HeaderB": "B1", "HeaderC": "C1", … }
1: { "HeaderA": "A2", "HeaderB": "B2", "HeaderC": "C2", … }
2: { "HeaderA": "A3", "HeaderB": "B3", "HeaderC": "C3", … }
var parsedArray = [
{ "HeaderA": "A1", "HeaderB": "B1", "HeaderC": "C1" },
{ "HeaderA": "A2", "HeaderB": "B2", "HeaderC": "C2" },
{ "HeaderA": "A3", "HeaderB": "B3", "HeaderC": "C3" }
];
(从您的示例中获得灵感),下面是获得所需格式的代码:
const uniqueKeys = [...new Set(...parsedArray.map(i => Object.keys(i)))];
const res = uniqueKeys.map(k => {
return [k, ...parsedArray.map(i => i[k]).filter(i => i !== null && i !== undefined)];
});
console.log(res);
解释:
[...new Set(...parsedArray.map(i => Object.keys(i)))];
扩展运算符(…)用于扩展值,因为数组是可编辑的。它内部的映射将收集对象(HeaderA、HeaderB、HeaderC)等的所有键<代码>新设置
将使数组唯一,以便删除重复项。您将得到如下数组:[“HeaderA”、“HeaderB”、“HeaderC”]
关于第二部分,return语句为每个唯一键创建一个新数组,将头本身作为第一个元素返回,并将原始数组中键为当前循环键的所有元素添加为数组值
在这里演奏小提琴:
作为旁注,这些值是在回调中异步写入的,因此您应该执行以下操作:
var myArray= []
d3.csv("data.csv", function(data){
myArray.push(data)
console.log(myArray)
// Write your code here, NOT OUTSIDE OF THIS FUNCTION BLOCK.
});
否则您将无法使用
myArray
,因为它仅在回调中可用。是否有任何理由使用这种格式(第3点)?这是d3.js的要求吗?@briosheje我的目标是从html表中读取数据。起初,我只是将html表粘贴到我工作的html文件中,找到一个jquery脚本,将其格式化为第3点的格式,并将其排序为我的元素。(现在,我已根据需要对数据进行了结构化)完成此操作后,我注意到还有一个csv文件可用。所以现在我需要得到一个适合这种格式的数组来提取数据。有没有更好的方法直接从csv文件中获得这种数组格式?(也许用另一种方式导入它?不,CSV应该是这样工作的,实际上数据是用这种方式获取的是正确的;)好的,谢谢你,这就是我需要的格式!但现在我有40多个数组,但我只需要最后一个(最后一个是完整的,其他数组是相同的数组,但元素较少)有没有办法只拥有完整的数组?它为什么输出其他阵列?谢谢你的帮助:)你说的“完成”是什么意思?上面的代码将查找所有CSV值,您是否只需要筛选包含所有键的值?请你在上面的提琴中举个例子,以便我能适当地帮助你?理想情况下,您应该提供一个更简单的示例来显示问题,如您上面所做的(输入、当前输出、预期输出)和一个问题。是否有方法存储数组,以便在回调之外使用它?