2016-09-20 151 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};' –