简化此条件声明

时间:2014-04-09 21:27:59

标签: javascript conditional-statements

我有这种疯狂的条件,我只知道有更好的写作方式。这是伪代码:

if( A && B ){
   console.log( 'do not show' );
}

if( A && C ){
   console.log( 'show' );
}

if( A && D ){
   console.log( 'do not show' );
}

if( A && E ) {
   console.log( 'do not show' );
}

我真的很沮丧。

7 个答案:

答案 0 :(得分:6)

这个怎么样:

if (A) {
   if (B || D || E) {
     console.log( 'do not show' );
   } 
   if ( C ) {
     console.log( 'show' );
   }
}

如果你真的想为每个条件指定单独的任务,那么你可以使用它,但是如果你的任务只是上面的代码,它就会过于复杂。

var A = C = true;
var B = D = E = false;

function doWhen( cond, fn ) {
    if ( cond === true ) {
        return ( typeof fn === 'function' ? fn() : fn );
    }
    return undefined;
}

doWhen(A, function() {
    [ [B, function() { console.log('b message') }], 
      [C, function() { console.log('c message') }], 
      [D, function() { console.log('d message') }], 
      [E, function() { console.log('e message') }] ]
        .forEach(function(cond) {
            doWhen.apply(null, cond);
        });
});

答案 1 :(得分:2)

不会这样做:

if (A) {
    if(B || D || E){
       console.log( 'do not show' );
    }

    if( C ){
       console.log( 'show' );
    }
}

<强>更新

或只是为了好玩(如果你想要每个州)

switch((a << 0) | (b << 1) | (c << 2) | (d << 3) | (e << 4)) {
    case 3: console.log("A && B"); break;
    case 5: console.log("A && C"); break;
    case 9: console.log("A && D"); break;
    case 17: console.log("A && E"); break;
}

可以使用的JSFiddle:http://jsfiddle.net/LxvBZ/

答案 2 :(得分:1)

如果您确实需要分别评估BCDE,这非常简单:

if( A ){
    if( B ){
       console.log( 'do not show' );
    }

    if( C ){
       console.log( 'show' );
    }

    if( D ){
       console.log( 'do not show' );
    }

    if( E ) {
       console.log( 'do not show' );
    }
}

现在,如果所有if(在第一个之后)应该是else if,那么这可以简化为:

if( A ){
    if( B || D || E ){
       console.log( 'do not show' );
    }else if( C ){
       console.log( 'show' );
    }
}

答案 3 :(得分:1)

我愿意:

if ( A ) {
    if( B || D || E ){
       console.log( 'do not show' );
    }

    if( C ){
       console.log( 'show' );
    }
}

答案 4 :(得分:0)

if( A ){
    var printOnLog = '';
    if( B || C || E ){
       printOnLog = 'do not show';
    }

    else if( C ){
       printOnLog = 'show';
    }

    else {
      //default action
    }

   console.log(printOnLog);
}

嗯,我认为如果这是真正的用途,就不可能有多种条件,否则如果&#34;为了避免无用。

如果可能的话(A&amp;&amp; B)&amp;&amp; (A&amp;&amp; C),只需使用普通&#34;如果&#34;

答案 5 :(得分:0)

你可以这样做:

if (A) {
    if (C) {
        console.log("show");
    }
    else if (B || D || E) {
        console.log("do not show");
    }
 }

或者如果你愿意,可以这样:

if (A && C) {
    console.log("show");
}
else if (A && (B || D || E)) {
    console.log("do not show");
}

答案 6 :(得分:0)

嗯,三元运算符是一回事。您可以使用它来缩小代码。

要向三元运算符添加更多条件,请使用'? '指定条件和':'以指定其他条件。它必须以最终的其他条件结束,如下所示。

var output = ((A && B) || (A && D) || (A && E)) ? "do not show" : (A && C) ? "show" : "";
console.log(output);