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,

如果这是一个愚蠢的问题,我想原谅自己,但我不知道这里出了什么问题。我对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);

    });
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;