2016-09-20 113 views
2

我需要生成一个总数为JSON对象的数字,例如:“ type_A programs in your country”。 我有一个JSON,并得到它来过滤类型和国家。过滤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。这个脚本可行,但并不准确 - 我认为只有在国家===的国家列在其阵列中的第一个国家时才会计算,如果它是第二,第三等,但不能确定。

这个问题似乎是在这里:

val.countries[0] === varCountry 

如何它应该工作:如果这个国家是“中国”来说,我想这通过JASON看,找到节目类型& &国数组并返回当地国家/地区的所有JSON对象,这些JSON对象都是a_program & &。

+0

从来没有使用'“异步”:FALSE'!这是一个糟糕的做法,浏览器供应商已经弃用它。您应该看到您的控制台中的警告 – charlietfl

回答

1

如果val.countries是一个数组,你应该能够使用这样的事情,而不是:

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

这就是我一直在寻找的感谢。但是现在IE11不能正常工作。 –

+0

var varCountry = $(“body”).data(“country”); var programsJSON = null; var a_Programs; $阿贾克斯({ '异步':假的, '全球性':假的, 'URL': '/ ProgramListing', '的dataType': “JSON”, '成功':功能(数据) { programsJSON =数据; \t \t countList();} });'' –

+0

功能countList(){ \t变种find_A = programsJSON.Programs.filter(功能(VAL,索引,阵列){ \t \t返回val.program_type ==='这是A类型'&& val.countries [0] === varCountry; \t}); \t \t a_Programs = find_A.length; \t $(“。program-count.a_Programs”)。text(a_Programs); \t \t return programsJSON; \t \t};' –