无法在Javascript / d3中访问数组

时间:2014-02-15 23:01:39

标签: javascript arrays d3.js

我有一个名为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?

});

1 个答案:

答案 0 :(得分:0)

@pars我对你的小提琴有点困惑。所以我会有一个猜测,看看它在哪里得到我们。 json数据在页面上,但您正在使用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个条目创建了一个条形图。我还没有真正解释我在那里所做的事情,但如果你有任何问题,请留言。