Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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文件创建的数组的数组元素_Javascript_Arrays_Csv_D3.js - Fatal编程技术网

Javascript-无法访问从csv文件创建的数组的数组元素

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": "

我需要将数据库生成的csv文件中的数据放入数组中。我下载了该文件,并将其放入与脚本相同的文件夹中

csv文件的格式如下:(很遗憾,我无法显示原始数据)

我找到了用于从csv文件导入数据的d3脚本。 我要导入的代码如下所示:

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…),为什么?/How

  • 我不能在代码中键入
    myArray[0]
    ,例如循环对象。我收到错误消息:“引用错误:未定义数组”

  • 我需要像这样格式化数组…

  • [[“HeaderA”、“A1”、“A2”、“A3”、“A4”、“A5”], [“校长B”、“B1”、“B2”、“B3”、“B4”、“B5”],[“校长C”、“C1”、“C2”、“C3”、“C4”、“C5”],…] …来处理数据。 我不知道该怎么做,因为我无法访问单个元素?


    谢谢:)

    可能既不是最快的,也不是最有效的解决方案,但以下是您可以执行的操作,以获得所需的格式,分为多个步骤:

    • 设置一组唯一键,以便您知道需要使用哪些键
    • 映射上述键并从原始数组中获取该键的所有值
    假设这样的示例输入:

    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值,您是否只需要筛选包含所有键的值?请你在上面的提琴中举个例子,以便我能适当地帮助你?理想情况下,您应该提供一个更简单的示例来显示问题,如您上面所做的(输入、当前输出、预期输出)和一个问题。是否有方法存储数组,以便在回调之外使用它?