1

我试图从 JSON 文件中提取数据。我无法更改数据在文件中键入或标记的方式,因为它是从 CSV 文件转换而来的。

我的 JSON 数据如下所示(我正在使用 grep 过滤器,然后将其存储在一个变量中,但为简洁起见,除非有人需要查看它,否则我不会显示该部分):

var medicare = {
    "": "",
    "80101": "NC",
    "80104": "NC",
    "80152": "24.61",
    "80154": "22.72",
    "80299": "18.83",
    "82055": "14.85",
    "82145": "9.71",
    "82542": "16.01",
    "82646": "23.91",
    "82649": "23.91",
    "83805": "24.23",
    "83840": "13.04",
    "83887": "22.26",
    "83925": "26.74",
    "83992": "20.20",
    "99080": "NC",
    "99358": "NC",
    "Carrier Type": "Medicare",
    "G0434": "12.17",
    "State": "Minnesota",
    "id": 122
}

我已经设法使用 $.getJSON() 加载文件,并且我还设法使用 $.grep() 制作了一个过滤器,以按状态和运营商类型过滤数组。现在我需要创建一个能够返回任何给定键值的函数。

function findInside( array, key ) {
    return array[key]; // <-- This is my problem.
}

我可以通过运行来返回值:

console.log(findInside(medicare, "80101"))

我只需要能够获得价值。我认为我不需要做任何循环等。我对 JavaScript 还是很陌生,并且正在努力解决这个问题,它应该很容易。

提前致谢!

编辑:这是除 JSON 文件之外的所有相关代码代码。我希望我没有像现在这样使用window.numbers,但我对此很陌生,我不知道任何其他方法可以让它工作。

 jQuery(document).ready(function($) {

    // First things first, fill the state picker.
    $.each(usStates, function(i, option) {
        $('#state').append($('<option/>').attr("value", option.abbreviation).text(option.name));
    });
    // Next we need to load in the JSON Data file.
    $.getJSON('data.json', function(data) {
        window.numbers = data
    });


    $("#state").change(function(){

        //Lets get the stuff in the fields.
        state = $("#state").val();
        stateName = $("#state option:selected").text();


        //Filter all through all the data.
        var workersComp = filterData("Worker's Comp", stateName);
        var commercial = filterData("Commercial", stateName);
        var medicare = filterData("Medicare", stateName);
        var medicaid = filterData("Medicaid", stateName);
        console.log(medicare);
        console.log(findInside(medicare, "80101")); // undefined



    });

})




//Functions
function filterData( i, d) {

    var r = $.grep( window.numbers, function(val, index) {
        return val.State === d;
    });
    var output = $.grep(r, function(val, index) {
            return val["Carrier Type"] ===  i;
        });
    return output
}
function findInside( array, key ) {
    return array[key];
}
4

1 回答 1

0

jQuery 的.grep()方法返回一个答案数组。

您在此处过滤数据的逻辑正在接收返回的结果数组。如果您保证每个项目只有一个,那么简短的解决方法是更改​​:

    //Filter all through all the data.
    var workersComp = filterData("Worker's Comp", stateName);
    var commercial = filterData("Commercial", stateName);
    var medicare = filterData("Medicare", stateName);
    var medicaid = filterData("Medicaid", stateName);

为此(获取每种类型的结果数组中的第一个元素):

    //Filter all through all the data.
    var workersComp = filterData("Worker's Comp", stateName)[0];
    var commercial = filterData("Commercial", stateName)[0];
    var medicare = filterData("Medicare", stateName)[0];
    var medicaid = filterData("Medicaid", stateName)[0];

长期的解决方法是重新审视你的过滤逻辑,看看你是否能想出一个更好的模式。

例如:如果您可以将数据处理成如下所示的形式:

 var states = {
     …,
     "Minnesota": {
         "Worker's Comp": {…},
         "Commercial": {…},
         "Medicare": {
             "80101": "NC",
             "80104": "NC",
             "80152": "24.61",
             ...
         },
         "Medicaid": {…}
     },
     ...
 }

选择正确的值可以简化为:

states[stateName]["Medicare"]["80101"]
于 2013-08-27T23:36:13.760 回答