2016-03-09 86 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

我不想同时应用所有过滤器。有时候,我只需要一个过滤器和所有的时间:( –