我有一个名为ageNames
的数组。当我打印它时,我得到:
Array[12]
当你看到它所说的元素时:
1: "Blah" 2: "blah2" length:12 _proto_:Array[0]
但是,如果我说console.log(ageNames[0])
它说undefined
(就像它对所有元素一样)。如果您执行console.log(ageNames.length)
,则会获得0
。
发生了什么事?
相关守则:
var mdata = [];
var mnames = [];
var rowID = [];
var ageNames = [];
d3.json("whiskey.json", function(error, data) {
ageNames.push(d3.keys(data[1]).filter(function(key) { return (key !== "Distillery" && key !== "RowID"); }));
data.forEach(function(d) {
if(d["RowID"] <= 5){
//console.log(mdata);
mnames.push(d["Distillery"]);
rowID.push(d["RowID"]);
//console.log(d);
mdata.push(d);
}
});
console.log(ageNames);
console.log(ageNames.length);
第一行打印数组[12],您可以查看各个元素。 第二行打印0.长度如何为0?
});
答案 0 :(得分:0)
d3.json
从服务器调用它(因为它不是'因为你正在使用小提琴)。为了让你的代码能够在小提琴上工作,我们可以忽略d3.json
调用,但是当你在开发环境中尝试这个时,记得把它全部包含在d3.json
调用中,因为它是异步的,如指出的那样菲利克斯。
说过看起来好像你正在尝试使用forEach循环创建一个用于d3条形图的变量。我采用了以下代码创建对象数组的方法,我认为将实现您想要的目标。
jsondata.forEach(function(d) {
if(d.RowID<=5) {
var el = {
mnames: d.Distillery,
rowID: d.RowID
};
mdata.push(el);
}
});
然后您可以通常的方式访问这些变量,尽管创建您想要的数据集 think 似乎需要做很多工作。您只需过滤.data
行中的数据,如
.data(jsondata.filter(function (d,i) { return //do some magic filtering stuff; })
无论如何,我已经更新了您的fiddle并使用前5个条目创建了一个条形图。我还没有真正解释我在那里所做的事情,但如果你有任何问题,请留言。