如何减少if / else语句Javascript

时间:2016-03-09 16:30:55

标签: javascript if-statement

我想减少这些if else语句。我该怎么办?我在javascript中使用函数来过滤显示devExpress gridView中的数据。 我想把它们放在许多或一个功能中。任何人都可以帮助我吗?

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

3 个答案:

答案 0 :(得分: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);
        }

一旦你清理了那些,你就可以消除一些重复。祝你好运!

答案 1 :(得分: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 + "#)" : "")
    );
}

答案 2 :(得分:0)

您需要做的第一件事是确定哪个变量影响gvBatchBilling.applyFilter()中的哪个条件。

例如,当StartDateFromFilter不是空字符串时,您正在应用[StartDate] >= #StartDateFromFilter#条件。然后,您需要将所有检查分隔为特定于变量的if块,并仅在需要时生成相应的条件。可以使用技巧:您可以将所有条件添加到conditions数组中。然后,如果所有变量都是空字符串,则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 ')); } } 字分隔。

{{1}}

它至少可以帮助您了解代码中发生的情况。因为它变得越来越简单。