简体   繁体   English

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

[英]How to shorten my nested if/else statement?

I have the following js code: 我有以下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 {
    .....
} 

The code has the same part in nested if/else statements: 该代码在嵌套的if / else语句中具有相同的部分:

if(/s01/.test(currentUrl) {

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

}

Can I shorten it to something like: 我可以将其缩短为:

if(a){

} else if(b){

}

Or any other suggestions? 或其他建议?

An alternative version, which will give you option to expand in future: 替代版本,将为您提供将来扩展的选项:

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

Also, if you add a class to all the items instead of using IDs, you could use: 另外,如果将类添加到所有项而不是使用ID,则可以使用:

var offelements = ".onoffelements";

Given 给定

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

You can do something like: 您可以执行以下操作:

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 {
    ...
}

or 要么

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 {
    ...
}

A slightly different approach for easier extensibility :) 稍有不同的方法,易于扩展:)

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

fiddle 小提琴

Version with a single variable 带有单个变量的版本

Given 给定

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

You can do something like: 您可以执行以下操作:

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 {
    …
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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