2014-11-06 55 views
0

我有一些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? 
      }); 

回答

1

測試變量是否被設置,只能做比較,如果它是:

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

相關問題