简体   繁体   中英

How can I reduce if/else statements Javascript

I want to reduce these if else statements. How can I proceed ?I'm using function in javascript to filter showing data in devExpress gridView. I want to put them in many or one function.any one can help me ?

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

Start by nesting some of these conditionals. It will save overhead if you aren't making the same checks over and over. Here's an example:

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

Once you get those cleaned up, you will be able to eliminate some duplicates. Good luck!

You can simplify the code using ternary operators, if you want to reduce the if/else blocks. Your code can be reconstructed as follows.

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 + "#)" : "")
    );
}

First thing you need to do, is determine which variable is affecting on which condition inside your gvBatchBilling.applyFilter() .

For example, when StartDateFromFilter is not empty string, you are applying [StartDate] >= #StartDateFromFilter# condition. Then you need to separate all checks to variable-specific if blocks and generate correspond condition only if you need. It's possible to use a trick: you may add all conditions into conditions array. And then, if all your variables are empty strings, your conditions array will be empty. If it's not empty, you can just join() all conditions into a string where all conditions are separated with And word.

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

It will, at least, help you understand what is happening in your code. Because it's becoming simpler.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM