您可以为grep生成动态和多个条件吗?

问题描述:

我有一些JSON数据,我想过滤几个下拉菜单。并非所有的下拉列表都会填充,因此当我在下面运行grep时,它不会返回所有我想要的结果。您可以为grep生成动态和多个条件吗?

首先我将每个下拉列表的选定值放入一个变量中。如果选择第一个索引,则该变量为空。然后我正在过滤,但是如果有任何变量为空(意味着下拉未更改),它会将空值传递给grep条件,从而不会返回正确的数据。有没有办法根据变量为null来生成我的多个条件?我知道我可以在嵌套if语句之后嵌套,但看起来效率不高。

var selectedVoltage  = ($selectVoltage[0].selectedIndex > 0) ? $selectVoltage.val() : null; 
var selectedMaxLPA  = ($selectMaxLPA[0].selectedIndex > 0) ? $selectMaxLPA.val() : null; 
var selectedFluidLevel = ($selectFluidLevel[0].selectedIndex > 0) ? $selectFluidLevel.val(): null; 

var filtered = $.grep(json ,function(product) { 
     return product.voltage === selectedVoltage && 
       product.lpa <= selectedMaxLPA && 
       product.fluid_level <= selectedFluidLevel; 
       //is it possible to dynamically generate these conditions? 
      }); 

测试变量是否被设置,只能做比较,如果它是:

var filtered = $.grep(json ,function(product) { 
    return (selectedVoltage === '' || selectedVoltage === null || product.voltage === selectedVoltage) && 
      (selectedMaxLPA === '' || selectedMaxLPA === null || product.lpa <= selectedMaxLPA) && 
      (selectedFluidLevel === '' || selectedFluidLevel === null || product.fluid_level <= selectedFluidLevel); 
      //is it possible to dynamically generate these conditions? 
}); 
+0

我确实做到了,但如果我只挑选电压它不返回任何结果的值。它应该返回所有具有我挑选的电压的电压,而不用过滤其他两个电场。 – drpcken 2014-11-07 05:28:57

+0

除了空字符串外,我还添加了代码来测试null。 – Barmar 2014-11-07 16:22:36

+0

啊,你是绝对正确的!它是一个字符串,所以将它从null更改为空的''''工作。谢谢!! – drpcken 2014-11-07 16:25:24