Javascript:查找值在JSON中出现的次数
如果这是一个愚蠢的问题,我想原谅自己,但我不知道这里出了什么问题。我对d3是相当陌生的,老实说,我对Javascript是一个整体。我有一个json文件,如下所示:Javascript:查找值在JSON中出现的次数,javascript,json,filter,Javascript,Json,Filter,如果这是一个愚蠢的问题,我想原谅自己,但我不知道这里出了什么问题。我对d3是相当陌生的,老实说,我对Javascript是一个整体。我有一个json文件,如下所示: [{"plaats":"AMSTERDAM","geboortejaar":1990,"vooropleiding":"MBO"}, {"plaats":"GENK","geboortejaar":1987,"vooropleiding":"HAVO"}, {"plaats":"JOPPE","geboortejaar":1992,
[{"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);
});
var svgHeight=400;
var svgWidth=400;
var svg=d3。选择(#pieChart)
.append(“svg”)
.attr(“高度”,svgHeight)
.attr(“宽度”,svgWidth);
d3.json(“propedeuse.json”,函数(错误,json){
警报(“你好,”+json[2]);
var VWO=0,
HAVO=0,
MBO=0;
对于(var i=0;i您的问题似乎与d3无关。它实际上只是一个javascript问题。这将返回一个具有所需计数的对象:
var json = [{"plaats":"AMSTERDAM","geboortejaar":1990,"vooropleiding":"MBO"}, {"plaats":"GENK","geboortejaar":1987,"vooropleiding":"HAVO"}, {"plaats":"JOPPE","geboortejaar":1992,"vooropleiding":"VWO"}];
var answer = json.reduce(function(prev, cur) {
var val = cur["vooropleiding"];
prev[val] = (prev[val] || 0) + 1;
return prev;
}, {});
我同意@Jonah的观点。这只是一个JavaScript问题。这里有另一种解决方法。您上面的示例和代码不可能完整/正确。数组中只有3个元素,因此json[16]
未定义。警报应该说“你好,未定义”。在没有看到实际数据的情况下,这只是猜测,但可能是某个数组元素缺少属性vooropleiding
(或拼写错误)?@StephenThomas这是我的错,我使用的实际json文件在数组中有282个元素,我现在只使用了三个元素作为示例。谢谢你让我知道,我现在就编辑它。非常感谢!我希望会有一个过滤器类的函数,我只是没想到它会被那样调用。但是是的,这对我帮助很大。这是E中的标准CMAScript 5,这意味着。此外,您已经知道如何将JSON源代码转换为数组(在您的情况下,D3会为您这样做),因此如果您将问题标题更改为“如何查找对象数组中出现值的次数”,您可能会获得更多的视图/投票或者别的什么。我得去上网了!谢谢你花时间帮忙。
var data = [{"plaats":"AMSTERDAM","geboortejaar":1990,"vooropleiding":"MBO"}, {"plaats":"GENK","geboortejaar":1987,"vooropleiding":"HAVO"}, {"plaats":"JOPPE","geboortejaar":1992,"vooropleiding":"VWO"}];
// Inside d3.json, your "json" variable is equivalent to this "data"
var vwo = data.filter(function(d) { return d.vooropleiding === "VWO"; }).length,
havo = data.filter(function(d) { return d.vooropleiding === "HAVO"; }).length,
mbo = data.filter(function(d) { return d.vooropleiding === "MBO"; }).length;
document.getElementById("vwo").innerText = vwo;
document.getElementById("havo").innerText = havo;
document.getElementById("mbo").innerText = mbo;