Javascript - Dynamic .filter() - Json文件

时间:2016-02-05 16:47:57

标签: javascript jquery json google-maps

我需要一个提示。我不是程序员,但我喜欢把自己的机会自动化,请原谅我,如果问题太基础了。

我正在使用 Google Maps API ,并且在某些时候需要完成过滤器以定位InfoWindow的内容。

我有一张包含各种过滤器的地图,这些过滤器适用于标记,应扩展到InfoWindow的内容。

我的JSON内容为InfoWindow,我以这种方式应用过滤器:(ards = JSON file)

var as=$(ards).filter(function (i,n){
    return n.ERB===marker.getTitle();
});

for (var i=0;i<as.length;i++)
{ .... }

好的,它有效,但我需要添加更多变量来过滤。

我拥有这些标记过滤器。

var cluster = $( "#CLUSTER-select" ).val();
var client = $('#cli_re-select').val();
var type_cli = $('#type_cli-select').val();
var type_recla = $('#type_recla-select').val();

我只举了4个示例,但有大约10个过滤器。

过滤器是独立的,您可以随时选择任何一个。

我这样做了:

var combine = [];
combine = [];

if(cluster !== '0') {
    combine.push('&& n.DESC_CLUSTER === ' + '"' + cluster + '"');
}
if(cliente_recente !== '0') {
    combine.push('&& n.CLIENT_RE === ' + '"' + client + '"');
}
if(tipo_cli !== '0') {
    combine.push('&& n.TYPE_CLI === ' + '"' + type_cli + '"');
}
if(tipo_reclama !== '0') {
    combine.push('&& n.TYPE_RECLA === ' + '"' + type_recla + '"');
}

var filter_add;
filter_add = "1 = 1";

for(var i=0;i<combine.length;i++){
    filter_add += combine[i];
}

结果是:1 = 1 && n.DESC_CLUSTER === "CTA" && n.TYPE_CLI === "SOHO"

我在我的过滤器中添加了这个变量:

var as=$(ards).filter(function (i,n){
    return n.ARMARIO_ERB===marker.getTitle() && filter_add;
});

但是它没有用,他没有将值应用于结果,只有第一部分。

我的问题是,如何才能完成这个动态过滤器?

感谢。

1 个答案:

答案 0 :(得分:1)

由于每个过滤器都是独立的,因此每个过滤器都需要一个标志,指定是否要检查该标准。如果检查了该标志,那么使用filterFlag和标准的结果(这是用于过滤器功能)。像这样:

var cluster = $( "#CLUSTER-select" ).val();
var client = $('#cli_re-select').val();
var as=$(ards).filter(function (i,n){
          var filterFlag=true;
          if(cluster !='0'){
               // Code for cluster
               filterFlag = filterFlag && ____ // add result of above code : TRUE or FALSE
          }
          if(client != '0' ){
                 // code here
                 filterFlag = filterFlag && ____ // add result of above code : TRUE or FALSE
           }
          //......same for others
          //......
         return filterFlag;
    });

如果您不明白这一点,请告诉我。我需要你的代码,以便我可以直接修复它。