2016-02-05 39 views
0

我需要提示。我不是一名程序员,但我喜欢把自己的流程自动化,如果问题太简单,不好意思。Javascript - Dynamic .filter() - Json文件

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

我有各种过滤器的地图,适用于标记,并应扩展到InfoWindow的内容。

我有我的InfoWindow的内容JSON,和我申请的过滤器是这样:(ARDS = JSON文件)

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

由于每个过滤器都是独立的,所以每个过滤器都需要一个标志来指定是否要检查该标准。如果该标志被选中,则将标准的结果与filterFlag进行AND(这是用于过滤器功能)。这样的事情:

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; 
    }); 

让我知道如果你不明白这一点。我将需要你的代码,以便我可以直接修复它。

+0

Pritesh,工作完美。谢谢。 –