是否可以将 switch 语句放在条件(三元)内?

Lee*_*eed 4 javascript ecmascript-6

我对使用条件(三元)运算符真的很陌生。是否可以在该运算符中放置 switch 语句?

这是我尝试过的:

function find(cn, romanNum) {
        if (cn >= 1 && cn <= 3) {
          return repeatString(romanNum[2], cn);
       }
        cn > 5 && cn < 9 ? return romanNum[1] + repeatString(romanNum[2], cn - 5) : switch(cn) {
            case 4:
            return romanNum[2] + romanNum[1];
            case 5: 
            return romanNum[1];
            case 9:
            return romanNum[2] + romanNum[0];
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道我做错了什么,但那是什么呢?每个人都会在某个时间点对某些事物感到陌生。


错误:

  • 期望有一个标识符,结果看到了'return'
  • 预料之中':',反而看到了'romanNum'
  • 缺少分号。
  • 预计从第 58 行'}'开始匹配'{',结果看到':'

这是正确的 es5 代码:

function find(cn, romanNum) {
        if (cn >= 1 && cn <= 3) {
            return repeatString(romanNum[2], cn);
        } else if (cn == 4) {
            return romanNum[2] + romanNum[1];
        } else if (cn == 5) {
            return romanNum[1];
        } else if (cn == 9) {
            return romanNum[2] + romanNum[0];
        }
        if (cn > 5 && cn < 9) {
            return romanNum[1] + repeatString(romanNum[2], cn - 5);
        }
    }
Run Code Online (Sandbox Code Playgroud)

帮助?

lum*_*mio 6

tl;dr:有点,但你不应该这样做,因为它不那么可读。
始终保持代码简短、简单但冗长。

长答案: 您可以将开关包装在立即调用的匿名函数中。

const a = 20;
const condition = a > 100;
const result = condition ? true : ( () => {
  switch ( a ) {
    case 11: return 22;
    case 20: return 21;
    default: return 100;
  }
} )();

console.log( result );
Run Code Online (Sandbox Code Playgroud)

但这不仅更复杂,而且更难阅读。

最好使用详细的编码风格。在你的情况下,这样的东西会更干净、更具可读性:

function test( a ) {
  const condition = a > 100;

  if ( condition ) {
    return true;
  }
  
  switch ( a ) {
    case 20: return 21;
    default: return 100;
  }
}

console.log( test( 20 ) );
Run Code Online (Sandbox Code Playgroud)