如何缩短我的嵌套if/else语句

How to shorten my nested if/else statement?

本文关键字:else 语句 if 嵌套 何缩短 我的      更新时间:2023-09-26

我有以下js代码:

var currentUrl = location
if(/s01/.test(currentUrl)||/s02/.test(currentUrl)){
    $('#info,#name').removeClass('onselect').addClass('offselect');
    if(/s01/.test(currentUrl)){
        $('#AA').removeClass('offselect').addClass('onselect');
    } else if(/s02/.test(currentUrl)){
        $('#BB').removeClass('offselect').addClass('onselect');
    }
} else {
    .....
} 

代码在嵌套的if/else语句中有相同的部分:

if(/s01/.test(currentUrl) {
} else if(/s02/.test(currentUrl) {
}

我可以把它缩短成:

if(a){
} else if(b){
}

还有其他建议吗?

一个可供选择的版本,它将为您提供将来展开的选项:

var offelements = "#info,#name,#AA,#BB";
var onelements = "";
if (/s01/.test(currentUrl)) onelements = "#AA";
else if (/s02/.test(currentUrl)) onelements = "#BB";
// etc: else if (/s03/.test(currentUrl)) onelements = "#CC";
if (onelements !== "")
{
    $(offelements).removeClass('onselect').addClass('offselect');
    $(onelements).removeClass('offselect').addClass('onselect');
}

另外,如果您为所有项目添加一个类而不是使用id,您可以使用:

var offelements = ".onoffelements";

给定

var a = /s01/.test(currentUrl)
var b = /s02/.test(currentUrl)

你可以这样做:

if (a||b) {
    $('#info,#name').removeClass('onselect').addClass('offselect');
    if (a) {
        $('#AA').removeClass('offselect').addClass('onselect');
    } else if (b) {
        $('#BB').removeClass('offselect').addClass('onselect');
    }
} else {
    ...
}

if (a) {
    $('#info,#name').removeClass('onselect').addClass('offselect');
    $('#AA').removeClass('offselect').addClass('onselect');
} else if (b) {
    $('#info,#name').removeClass('onselect').addClass('offselect');
    $('#BB').removeClass('offselect').addClass('onselect');
} else {
    ...
}

一个稍微不同的方法,更容易扩展:)

var mapUrlPartIds = { "s01": "AA", "s02": "BB" },
    rxUrlParts = new RegExp(Object.keys(mapUrlPartIds).join("|")),
    match = (currentUrl.match(rxUrlParts) || []);
if (match.length && mapUrlPartIds[match[0]]) {
  $('#info,#name').removeClass('onselect').addClass('offselect');
  $(mapUrlIds[match[0]]).removeClass('offselect').addClass('onselect');
}

小提琴

版本单变量

给定

var a = /s01/.test(currentUrl) << 0
      + /s02/.test(currentUrl) << 1
;

你可以这样做:

if(a){
    $('#info,#name').removeClass('onselect').addClass('offselect');
    if(a & (1<<0)){
        $('#AA').removeClass('offselect').addClass('onselect');
    } else
    if(a & (1<<1)){
        $('#BB').removeClass('offselect').addClass('onselect');
    }
} else {
    …
}