2016-09-20 6 views
2

Мне нужно создать число, представляющее собой общее количество объектов JSON, например: « type_A программы в вашей стране». У меня есть 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, он фильтрует все категории, которые соответствуют a_Programs & & соответствует стране в списке на основе пройденного var. Затем под ним подсчитывается общая длина и создается число в виде var. Этот скрипт работает, но не является точным - я думаю, что он учитывается только в том случае, когда страна === только в списке, указанном первым в своем массиве, и игнорирует его, если это 2-й, 3-й и т. Д., Но не уверен.

Проблема, кажется, здесь:

val.countries[0] === varCountry 

Как это должно работать: Если страна «Китай», например, я хочу, чтобы это смотреть через JASON и найти тип программы в & & страну массив и вернуть общее количество объектов 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 (" страна "); var programsJSON = null; var a_Programs; $ .ajax ({ 'асинхронной' ложь, 'глобального': ложь, 'URL': '/ ProgramListing', 'DATATYPE': "JSON", 'успех': функция (данные) { programsJSON = данные; \t \t countList();} }); '' –

+0

функция countList() { \t вар find_A = programsJSON.Programs.filter (функция (значение, индекс, массив) { \t \t return val.program_type === 'this is A type' && val.countries [0] === varCountry; \t}); \t \t a_Programs = find_A.length; \t $ (". Program-count.a_Programs"). Text (a_Programs); \t \t обратные программыJSON; \t \t}; ' –

Смежные вопросы