Javascript:查找一个值在JSON中出现的次数

Javascript: finding the number of times a value occurs in JSON

本文关键字:JSON 查找 一个 Javascript      更新时间:2023-09-26

我想原谅自己,以防这是一个愚蠢的问题,但我不知道这里出了什么问题。老实说,我对d3和整个Javascript都很陌生。我有一个json文件,看起来像这样:

[{"plaats":"AMSTERDAM","geboortejaar":1990,"vooropleiding":"MBO"}, {"plaats":"GENK","geboortejaar":1987,"vooropleiding":"HAVO"}, {"plaats":"JOPPE","geboortejaar":1992,"vooropleiding":"VWO"}]

我试图弄清楚值"HAVO"、"MBO"answers"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);
    });

我确实收到了警报,"你好,[对象]"。但根据我的控制台,json[i]是未定义的。为什么它突然没有定义,而它在警报下工作得很好?

我需要做的(在本例中)是控制台为每个值记录1。

http://jsfiddle.net/jL2We/1/

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;

我同意@Jonah的观点。这只是一个JavaScript问题。这是另一种方法。

您的问题似乎与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;
}, {});