[英]How to reduce the complexity of this if else statements in 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.