【发布时间】:2013-11-25 16:36:37
【问题描述】:
如果这是一个愚蠢的问题,我想原谅自己,但我无法弄清楚这里出了什么问题。我对 d3 还很陌生,老实说 Javascript 作为一个整体。我有一个 json 文件,看起来像这样:
[{"plaats":"AMSTERDAM","geboortejaar":1990,"vooropleiding":"MBO"}, {"plaats":"GENK","geboortejaar":1987,"vooropleiding":"HAVO"}, {"plaats":"JOPPE","geboortejaar":1992,"vooropleiding":"VWO"}]
我试图弄清楚值“HAVO”、“MBO”和“VWO”在我的 JSON 文件中出现的频率。为此,我编写了以下代码:
var svgHeight = 400;
var svgWidth = 400;
var svg = d3.select("#pieChart")
.append("svg")
.attr("height", svgHeight)
.attr("width", svgWidth);
d3.json("propedeuse.json", function (error, json) {
alert("Hello, " + json[2]);
var VWO = 0,
HAVO = 0,
MBO = 0;
for (var i = 0; i <= json.length; i++) {
if (json[i].vooropleiding == "VWO") {
VWO++;
}
else if (json[i].vooropleiding == "HAVO") {
HAVO++;
}
else {
MBO++;
}
}
svg.append("p")
.text(HAVO);
console.log("MBO: " + HAVO);
console.log("HAVO: " + HAVO);
console.log("VWO: " + VWO);
});
我确实收到了警报,“你好,[object Object]”。但根据我的控制台 json[i] 是未定义的。为什么它突然未定义,而它在警报中工作得很好?
我需要做的是(在本例中)控制台为每个值记录 1。
【问题讨论】:
-
您上面的示例和代码不完整/不正确。数组中只有 3 个元素,因此
json[16]未定义。警报应该说“你好,未定义”。在没有看到实际数据的情况下,这只是一个猜测,但可能是您的数组元素之一缺少属性vooropleiding(或拼写错误)? -
@StephenThomas 那是我的错,我使用的实际 json 文件在数组中有 282 个元素,我现在只使用了三个作为示例。谢谢你告诉我,我现在编辑它。
标签: javascript json filter