簡體   English   中英

如何減少if / else語句Javascript

[英]How can I reduce if/else statements Javascript

我想減少這些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("");
            } 
        }

首先嵌套其中一些條件。 如果您不反復進行相同的檢查,將節省開銷。 這是一個例子:

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

清理完這些文件后,就可以消除一些重復項。 祝好運!

如果要減少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 + "#)" : "")
    );
}

您需要做的第一件事是確定哪個變量會影響gvBatchBilling.applyFilter()內的哪個條件。

例如,當StartDateFromFilter不是空字符串時,您將應用[StartDate] >= #StartDateFromFilter#條件。 然后,您需要將所有檢查分為特定於變量的if塊,並僅在需要時才生成對應條件。 可以使用一個技巧:您可以將所有條件添加到conditions數組中。 然后,如果所有變量均為空字符串,則conditions數組將為空。 如果不為空,則可以join()所有條件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 '));
    }
}

至少,它將幫助您了解代碼中正在發生的事情。 因為它變得越來越簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM