【问题标题】:Filtering JSON and comparing array values过滤 JSON 并比较数组值
【发布时间】:2017-01-28 23:38:15
【问题描述】:

我需要生成一个 JSON 对象总数的数字,例如:“6 type_A programs in your country”。 我有一个 JSON,并且已经得到它来过滤类型和国家/地区。

JSON 中的每个对象都包含一个“国家”数组(有些包含多个国家,有些只有一个):

"countries":["China","Singapore","U.S.A.","United Kingdom"]

JS:

var varCountry = $( "body" ).data( "country");

var programsJSON = (function () {

    var programsJSON = null;
    var a_Programs;


    $.ajax({
       'async': false,
       'global': false,
       'url': '/ProgramListing',
       'dataType': "json",
       'success': function (data) {
          programsJSON = data;
       }
    });

    var find_A = programsJSON.Programs.filter(function(val, index, array) {
        return val.program_type === 'this is A type' && val.countries[0] === varCountry;
    });

    a_Programs = find_A.length; 
    $(".program-count.a_Programs").text(a_Programs);

    return programsJSON;

})(); 

目前它似乎几乎可以工作,它通过 JSON 查找,它根据传递的 var 过滤与 a_Programs && 匹配列表中的国家/地区的所有类别。然后在它下面计算总长度并创建一个数字作为变量。该脚本有效但不准确 - 我认为它仅在国家/地区 === 到仅在其数组中列出的第一个国家/地区时才计算在内,如果它是第 2、第 3 等则忽略它,但不确定。

问题似乎出在这里:

val.countries[0] === varCountry

它应该如何工作:例如,如果国家是“中国”,我希望它查看 JASON 并找到程序类型 && 国家数组并返回两者都是 a_Program && 的 JSON 对象的总数当地国家。

【问题讨论】:

  • 永远不要使用'async': false!这是一种糟糕的做法,浏览器供应商已弃用它。您应该会在控制台中看到警告

标签: jquery arrays json filtering


【解决方案1】:

如果val.countries 是一个数组,你应该可以使用类似这样的东西:

return val.program_type === 'this is A type' && val.countries.indexOf(varCountry) > 0;

【讨论】:

  • 这就是我想要的,谢谢。但是现在它在 IE11 中不起作用。
  • var varCountry = $( "body" ).data( "country"); var programsJSON = null; var a_Programs; $.ajax({ 'async': false, 'global': false, 'url': '/ProgramListing', 'dataType': "json", 'success': function (data) { programsJSON = data; countList(); } });
  • function countList(){ var find_A = programsJSON.Programs.filter(function(val, index, array) { return val.program_type === 'this is A type' && val.countries[0] === varCountry; }); a_Programs = find_A.length; $(".program-count.a_Programs").text(a_Programs); return programsJSON; };
  • 我想展示在 IE 中不起作用的工作代码:显然我不知道如何提问。我知道如果我问另一个问题 sombody 会标记为重复。
  • 对不起,我忘了IE11不支持includes。请查看我修改后的答案。
猜你喜欢
  • 2021-12-27
  • 2021-11-18
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 2019-08-31
  • 2015-08-04
  • 2021-08-31
相关资源
最近更新 更多