-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
};
Downvoters:不要只是投票下来,而应该让这位新人注意你投票的原因。 @Katsuya:请看看[mcve] – mplungjan
在图片中,我只能看到'console.log(categories);'returns'[]',这意味着'categories'数组是空的。当一个数组为空时,当你试图通过'categories [0]'访问一个元素时,你会收到一个'undefined'。 – gus27
在您的'multicsv'函数中,在两行末尾会丢失分号,可能会产生不需要的副作用。总是使用分号:)除此之外,'var'在声明'ix'变量之前缺少。 – gus27