2016-11-14 87 views
-4

我一直在尝试读取d3库的多个csv文件,下面是other stack overflow。 所有csv数据都将存储在数组结果中。但是使用Chrome开发人员工具检查结果,数据存储的结果很奇怪,如下图所示。 我可以看到数据存储到结果数组,但我无法指定存储在数组中的元素。 任何人都可以告诉我如何在这个数组的情况下指定元素?或者告诉我如何避免以这种方式将数据存储到数组中?如何指定数组中的元素?

我可以看到数据存储在阵列中,但如果我试图从数组元素,它们将返回“未定义”:

function multicsv(files){ 
    var results=[]; 
    var categories=[]; 
    //var category=[]; 
    var filesLength = (files || []).length; 
    //console.log(filesLength); 
    var count=0; 
    var counter=function(){ 
     return count++ 
    } 
    for (var i=0 ;i<filesLength;i++){ 
     d3.csv(files[i], function(data){ 
      ix=counter(); 
      data,category=get_category(data,ix); 
      //console.log(data); 
      arr=fitstruct(category,data); 
      //console.log(arr); 
      //results.push(arr); 
      results[ix]=arr 
      //categories.push(category) 
      categories[ix]=category 
     }); 
    } 

    console.log(results); 
    console.log(results[0]); 
}; 

function get_category(data,ix){ 
    var category=[] 
    data.forEach(function(d){ 
     if(d.Subcategory=="General"){ 
      d.category=d[""] 
      category.push(d[""]); 
     }else if(d.Subcategory!="General"){ 
      d.category=d.Subcategory; 
      category.push(d.Subcategory); 
     }; 
     d.electric=+d["Electricity [kWh]"]; 
     d.version=ix; 
    }) 
    return data,category 
}; 

function fitstruct(list,data){ 
     var electricity=[]; 
     var total=0 
     for (i=0;i<list.length;i++){ 
      //electricity.push(category[i],data[i]["electric"]) 
      electricity[list[i]]=data[i]["electric"]/1000000 
      total+=data[i]["electric"] 
     } 
     electricity["version"]=data[0]["version"]; 
     electricity["total"]=total/1000000 
     return electricity 
     }; 
+0

Downvoters:不要只是投票下来,而应该让这位新人注意你投票的原因。 @Katsuya:请看看[mcve] – mplungjan

+0

在图片中,我只能看到'console.log(categories);'returns'[]',这意味着'categories'数组是空的。当一个数组为空时,当你试图通过'categories [0]'访问一个元素时,你会收到一个'undefined'。 – gus27

+0

在您的'multicsv'函数中,在两行末尾会丢失分号,可能会产生不需要的副作用。总是使用分号:)除此之外,'var'在声明'ix'变量之前缺少。 – gus27

回答

0

这个问题要么是涉及到D3专,或者更可能是JSON问题。

您可以通过使用jsonlint.com等工具更清楚地查看JSON来帮助自己。要做到这一点:

  1. 这一行添加到您的代码

    的console.log(JSON.stringify(my_json_variable))

  2. 按下浏览器,选择控制台F12。

  3. 运行代码
  4. 复制&将JSON字符串从控制台粘贴到json查看器和视图中。

代码中的多次错误纯粹是程序员的假设错误。以这种方式可视化JSON可以帮助搁置假设。