2016-03-09 89 views
0

我想減少這些if else語句。我如何繼續?我在javascript中使用函數來過濾顯示devExpress gridView中的數據。 我想把它們放在很多或者一個功能中。任何一個都可以幫助我?如何減少if/else語句Javascript

function OnSelectClient() 
     { 
      var clientNameFilter = $("#idInputSearchClient").val(); 
      var recordNameFilter = $("#idInputSearchDossier").val(); 
      var StartDateFromFilter = StartDateFrom.GetText(); 
      var StartDateToFilter = StartDateTo.GetText(); 
      var ConfirmationDateFromFilter = ConfirmationDateFrom.GetText(); 
      var ConfirmationDateToFilter = ConfirmationDateTo.GetText(); 

      if (clientNameFilter != "" && recordNameFilter != "" && StartDateFromFilter != "" && StartDateToFilter != "" && ConfirmationDateFromFilter != "" && ConfirmationDateToFilter != "") 
      { 
       gvBatchBilling.AutoFilterByColumn("ClientName", null); 
       gvBatchBilling.AutoFilterByColumn("TripCode", null); 
       gvBatchBilling.ApplyFilter("([ClientName] = '" + clientNameFilter + "') And ([TripCode] = '" + recordNameFilter + "') And ([StartDate] >= #" + StartDateFromFilter + "#) And ([StartDate] <= #" + StartDateToFilter + "#) And ([ConfirmationDate] >= #" + ConfirmationDateFromFilter + "#) And ([ConfirmationDate] <= #" + ConfirmationDateToFilter + "#)"); 
      } 
      else if (clientNameFilter != "" && recordNameFilter != "" && ConfirmationDateFromFilter != "" && ConfirmationDateToFilter != "") { 
       gvBatchBilling.AutoFilterByColumn("ClientName", null); 
       gvBatchBilling.AutoFilterByColumn("TripCode", null); 
       gvBatchBilling.ApplyFilter("([ClientName] = '" + clientNameFilter + "') And ([TripCode] = '" + recordNameFilter + "')And ([ConfirmationDate] >= #" + ConfirmationDateFromFilter + "#) And ([ConfirmationDate] <= #" + ConfirmationDateToFilter + "#)"); 
      } 
      else if (clientNameFilter != "" && StartDateFromFilter != "" && StartDateToFilter != "" && ConfirmationDateFromFilter != "" && ConfirmationDateToFilter != "") { 
       gvBatchBilling.AutoFilterByColumn("ClientName", null); 
       gvBatchBilling.AutoFilterByColumn("TripCode", null); 
       gvBatchBilling.ApplyFilter("([ClientName] = '" + clientNameFilter + "') And ([StartDate] >= #" + StartDateFromFilter + "#) And ([StartDate] <= #" + StartDateToFilter + "#) And ([ConfirmationDate] >= #" + ConfirmationDateFromFilter + "#) And ([ConfirmationDate] <= #" + ConfirmationDateToFilter + "#)"); 
      } 

      else if (clientNameFilter != "" && recordNameFilter != "" && StartDateFromFilter != "" && StartDateToFilter != "") { 
       gvBatchBilling.AutoFilterByColumn("ClientName", null); 
       gvBatchBilling.AutoFilterByColumn("TripCode", null); 
       gvBatchBilling.ApplyFilter("([ClientName] = '" + clientNameFilter + "') And ([TripCode] = '" + recordNameFilter + "') And ([StartDate] >= #" + StartDateFromFilter + "#) And ([StartDate] <= #" + StartDateToFilter + "#)"); 
      } 
      else if (clientNameFilter != "" && StartDateFromFilter != "" && StartDateToFilter != "") { 
       gvBatchBilling.AutoFilterByColumn("ClientName", null); 
       gvBatchBilling.AutoFilterByColumn("TripCode", null); 
       gvBatchBilling.ApplyFilter("([ClientName] = '" + clientNameFilter + "') And ([StartDate] >= #" + StartDateFromFilter + "#) And ([StartDate] <= #" + StartDateToFilter + "#)"); 
      } 
      else if (clientNameFilter != "" && ConfirmationDateFromFilter != "" && ConfirmationDateToFilter != "") { 
       gvBatchBilling.AutoFilterByColumn("ClientName", null); 
       gvBatchBilling.AutoFilterByColumn("TripCode", null); 
       gvBatchBilling.ApplyFilter("([ClientName] = '" + clientNameFilter + "') And ([ConfirmationDate] >= #" + ConfirmationDateFromFilter + "#) And ([ConfirmationDate] <= #" + ConfirmationDateToFilter + "#)"); 
      } 
      else if (recordNameFilter != "" && ConfirmationDateFromFilter != "" && ConfirmationDateToFilter != "") { 
       gvBatchBilling.AutoFilterByColumn("ClientName", null); 
       gvBatchBilling.AutoFilterByColumn("TripCode", null); 
       gvBatchBilling.ApplyFilter("([TripCode] = '" + recordNameFilter + "') And ([ConfirmationDate] >= #" + ConfirmationDateFromFilter + "#) And ([ConfirmationDate] <= #" + ConfirmationDateToFilter + "#)"); 
      } 

      else if (recordNameFilter != "" && StartDateFromFilter != "" && StartDateToFilter != "") { 
       gvBatchBilling.AutoFilterByColumn("ClientName", null); 
       gvBatchBilling.AutoFilterByColumn("TripCode", null); 
       gvBatchBilling.ApplyFilter("([TripCode] = '" + recordNameFilter + "') And ([StartDate] >= #" + StartDateFromFilter + "#) And ([StartDate] <= #" + StartDateToFilter + "#)"); 
      } 

      else if (ConfirmationDateFromFilter != "" && ConfirmationDateToFilter != "" && StartDateFromFilter != "" && StartDateToFilter != "") { 
       gvBatchBilling.AutoFilterByColumn("ClientName", null); 
       gvBatchBilling.AutoFilterByColumn("TripCode", null); 
       gvBatchBilling.ApplyFilter("([ConfirmationDate] >= #" + ConfirmationDateFromFilter + "#) And ([ConfirmationDate] <= #" + ConfirmationDateToFilter + "#) And ([StartDate] >= #" + StartDateFromFilter + "#) And ([StartDate] <= #" + StartDateToFilter + "#)"); 
      } 

      else if (clientNameFilter != "" && recordNameFilter != "") { 
       gvBatchBilling.AutoFilterByColumn("ClientName", null); 
       gvBatchBilling.AutoFilterByColumn("TripCode", null); 
       gvBatchBilling.ApplyFilter("([ClientName] = '" + clientNameFilter + "') And ([TripCode] = '" + recordNameFilter + "')"); 
      } 

      else if (clientNameFilter != "") { 
       gvBatchBilling.AutoFilterByColumn("TripCode", null); 
       gvBatchBilling.AutoFilterByColumn("ClientName", clientNameFilter); 
      } 
      else if (StartDateFromFilter != "" && StartDateToFilter != "") 
      { 
       gvBatchBilling.AutoFilterByColumn("ClientName", null); 
       gvBatchBilling.AutoFilterByColumn("TripCode", null); 
       gvBatchBilling.ApplyFilter("([StartDate] >= #" + StartDateFromFilter + "#) And ([StartDate] <= #" + StartDateToFilter + "#)"); 
      } 

      else if (ConfirmationDateFromFilter != "" && ConfirmationDateToFilter != "") { 
       gvBatchBilling.AutoFilterByColumn("ClientName", null); 
       gvBatchBilling.AutoFilterByColumn("TripCode", null); 
       gvBatchBilling.ApplyFilter("([ConfirmationDate] >= #" + ConfirmationDateFromFilter + "#) And ([ConfirmationDate] <= #" + ConfirmationDateToFilter + "#)"); 
      } 
      else if (recordNameFilter != "") { 
       gvBatchBilling.AutoFilterByColumn("ClientName", null); 
       gvBatchBilling.AutoFilterByColumn("TripCode", recordNameFilter); 
      } 
      else 
      { 
       gvBatchBilling.AutoFilterByColumn("ClientName", null); 
       gvBatchBilling.AutoFilterByColumn("TripCode", null); 
       gvBatchBilling.ApplyFilter(""); 
      } 
     } 
+5

如果代碼是這樣的工作問題,更好的問問http://codereview.stackexchange.com/ – charlietfl

回答

0

你需要做的第一件事,就是確定哪些變量上的gvBatchBilling.applyFilter()內部條件的影響。

例如,當StartDateFromFilter不是空字符串時,您正在應用[StartDate] >= #StartDateFromFilter#條件。然後,您需要將所有檢查分離到特定於變量的if塊,並僅在需要時才生成相應的條件。可以使用一個技巧:您可以將所有條件添加到conditions數組中。然後,如果所有變量都是空字符串,則您的數組將爲空。如果不是空的,則可以將所有條件的join()轉換爲一個字符串,其中所有條件都以And字隔開。

function OnSelectClient() { 
    var clientNameFilter = $("#idInputSearchClient").val(); 
    var recordNameFilter = $("#idInputSearchDossier").val(); 
    var StartDateFromFilter = StartDateFrom.GetText(); 
    var StartDateToFilter = StartDateTo.GetText(); 
    var ConfirmationDateFromFilter = ConfirmationDateFrom.GetText(); 
    var ConfirmationDateToFilter = ConfirmationDateTo.GetText(); 

    var conditions = []; 

    if (clientNameFilter != '') { 
     // No need to generate "[ClientName] = clientNameFilter" 
     // because it's exactly what AutoFilterByColumn() does — apply 
     // field "equals" filter. 
     gvBatchBilling.AutoFilterByColumn("ClientName", clientNameFilter); 
    } 

    if (recordNameFilter != '') { 
     // The same as above 
     gvBatchBilling.AutoFilterByColumn("TripCode", recordNameFilter); 
    } 

    if (StartDateFromFilter != '') { 
     conditions.push("([StartDate] >= #" + StartDateFromFilter + "#)"); 
    } 

    if (StartDateToFilter != '') { 
     conditions.push("([StartDate] <= #" + StartDateToFilter + "#)"); 
    } 

    if (ConfirmationDateFromFilter != '') { 
     conditions.push("([ConfirmationDate] >= #" + ConfirmationDateFromFilter + "#)"); 
    } 

    if (ConfirmationDateToFilter != '') { 
     conditions.push("([ConfirmationDate] <= #" + ConfirmationDateToFilter + "#)"); 
    } 

    if (conditions.length > 0) { 
     gvBatchBilling.applyFilter(conditions.join(' And ')); 
    } 
} 

它至少會幫助你理解你的代碼中發生了什麼。因爲它變得更簡單。

+0

)謝謝!這是我需要的:D –

0

首先嵌套這些條件中的一部分。如果你不一遍一遍地進行相同的檢查,它將節省開銷。這裏有一個例子:

if(clientNameFilter != "") { 
     if (recordNameFilter != "" && StartDateFromFilter != "" && StartDateToFilter != "" && ConfirmationDateFromFilter != "" && ConfirmationDateToFilter != "") 
     { 
      gvBatchBilling.AutoFilterByColumn("ClientName", null); 
      gvBatchBilling.AutoFilterByColumn("TripCode", null); 
      gvBatchBilling.ApplyFilter("([ClientName] = '" + clientNameFilter + "') And ([TripCode] = '" + recordNameFilter + "') And ([StartDate] >= #" + StartDateFromFilter + "#) And ([StartDate] <= #" + StartDateToFilter + "#) And ([ConfirmationDate] >= #" + ConfirmationDateFromFilter + "#) And ([ConfirmationDate] <= #" + ConfirmationDateToFilter + "#)"); 
     } 
     else if (recordNameFilter != "" && ConfirmationDateFromFilter != "" && ConfirmationDateToFilter != "") { 
      gvBatchBilling.AutoFilterByColumn("ClientName", null); 
      gvBatchBilling.AutoFilterByColumn("TripCode", null); 
      gvBatchBilling.ApplyFilter("([ClientName] = '" + clientNameFilter + "') And ([TripCode] = '" + recordNameFilter + "')And ([ConfirmationDate] >= #" + ConfirmationDateFromFilter + "#) And ([ConfirmationDate] <= #" + ConfirmationDateToFilter + "#)"); 
     } 
     else if (StartDateFromFilter != "" && StartDateToFilter != "" && ConfirmationDateFromFilter != "" && ConfirmationDateToFilter != "") { 
      gvBatchBilling.AutoFilterByColumn("ClientName", null); 
      gvBatchBilling.AutoFilterByColumn("TripCode", null); 
      gvBatchBilling.ApplyFilter("([ClientName] = '" + clientNameFilter + "') And ([StartDate] >= #" + StartDateFromFilter + "#) And ([StartDate] <= #" + StartDateToFilter + "#) And ([ConfirmationDate] >= #" + ConfirmationDateFromFilter + "#) And ([ConfirmationDate] <= #" + ConfirmationDateToFilter + "#)"); 
     } 

     else if (recordNameFilter != "" && StartDateFromFilter != "" && StartDateToFilter != "") { 
      gvBatchBilling.AutoFilterByColumn("ClientName", null); 
      gvBatchBilling.AutoFilterByColumn("TripCode", null); 
      gvBatchBilling.ApplyFilter("([ClientName] = '" + clientNameFilter + "') And ([TripCode] = '" + recordNameFilter + "') And ([StartDate] >= #" + StartDateFromFilter + "#) And ([StartDate] <= #" + StartDateToFilter + "#)"); 
     } 
     else if (StartDateFromFilter != "" && StartDateToFilter != "") { 
      gvBatchBilling.AutoFilterByColumn("ClientName", null); 
      gvBatchBilling.AutoFilterByColumn("TripCode", null); 
      gvBatchBilling.ApplyFilter("([ClientName] = '" + clientNameFilter + "') And ([StartDate] >= #" + StartDateFromFilter + "#) And ([StartDate] <= #" + StartDateToFilter + "#)"); 
     } 
     else if (ConfirmationDateFromFilter != "" && ConfirmationDateToFilter != "") { 
      gvBatchBilling.AutoFilterByColumn("ClientName", null); 
      gvBatchBilling.AutoFilterByColumn("TripCode", null); 
      gvBatchBilling.ApplyFilter("([ClientName] = '" + clientNameFilter + "') And ([ConfirmationDate] >= #" + ConfirmationDateFromFilter + "#) And ([ConfirmationDate] <= #" + ConfirmationDateToFilter + "#)"); 
     } 

     else if (recordNameFilter != "") { 
      gvBatchBilling.AutoFilterByColumn("ClientName", null); 
      gvBatchBilling.AutoFilterByColumn("TripCode", null); 
      gvBatchBilling.ApplyFilter("([ClientName] = '" + clientNameFilter + "') And ([TripCode] = '" + recordNameFilter + "')"); 
     } 
     else{ 
      gvBatchBilling.AutoFilterByColumn("TripCode", null); 
      gvBatchBilling.AutoFilterByColumn("ClientName", clientNameFilter); 
     } 

一旦你得到那些清理,你將能夠消除一些重複。祝你好運!

+0

感謝您的回覆。有沒有使用許多「如果」的解決方案? –

+0

bhanu09看起來像他有一個很好的例子。 –

+0

@dhouhababay是的。工作更多的嵌套。這項工作必須在你身邊完成,我們無法爲你提供幫助。如果你的代碼需要這麼多的條件,你可能會在算法方面遇到問題,所以你可能想徹底重新思考這個問題。 – vard

0

如果您想減少if/else塊,可以使用三元組來簡化代碼。您的代碼可以重建如下。

function OnSelectClient() 
{ 
    var clientNameFilter = $("#idInputSearchClient").val(); 
    var recordNameFilter = $("#idInputSearchDossier").val(); 
    var StartDateFromFilter = StartDateFrom.GetText(); 
    var StartDateToFilter = StartDateTo.GetText(); 
    var ConfirmationDateFromFilter = ConfirmationDateFrom.GetText(); 
    var ConfirmationDateToFilter = ConfirmationDateTo.GetText(); 

    gvBatchBilling.AutoFilterByColumn("ClientName", null); 
    gvBatchBilling.AutoFilterByColumn("TripCode", null); 
    gvBatchBilling.ApplyFilter(
     ((clientNameFilter != "") ? "([ClientName] = '" + clientNameFilter + "') And" : "") + 
     ((recordNameFilter != "") ? " ([TripCode] = '" + recordNameFilter + "') And" : "") + 
     ((StartDateFromFilter != "") ? "([StartDate] >= #" + StartDateFromFilter + "#) And" : "") + 
     ((StartDateToFilter != "") ? "([StartDate] <= #" + StartDateToFilter + "#) And" : "") + 
     ((ConfirmationDateFromFilter != "") ? "([ConfirmationDate] >= #" + ConfirmationDateFromFilter + "#) And" : "") + 
     ((ConfirmationDateToFilter != "") ? "([ConfirmationDate] <= #" + ConfirmationDateToFilter + "#)" : "") 
    ); 
} 
+0

我不想同時應用所有過濾器。有時候,我只需要一個過濾器和所有的時間:( –