如何根据布尔值的不同组合消除if-else时做不同的事情?

oco*_*mfd 8 javascript if-statement

例如,假设我需要根据布尔值的组合执行不同的操作:cond_0,cond_1和cond_2:

cond_0 cond_1 cond_2
false  false  false  a();
false  false  true   b();
.
.
.
true   true   true   h();
Run Code Online (Sandbox Code Playgroud)

它看起来好像将位数映射到函数:

000:a()
001:b()
.
.
.
111:h()
Run Code Online (Sandbox Code Playgroud)

虽然一般规则看起来很简单,但我不知道如何在没有if-else的情况下编写它,当前的表单看起来像这样:

var f=function(cond_0,cond_1,cond_2){
  if(!cond_0 && !cond_1 && !cond_2){
    a();
  }else if( cond_0 && !cond_1 && !cond_2)){
    b();
  }else if(!cond_0 &&  cond_1 && !cond_2)){
    c();
  }else if( cond_0 &&  cond_1 && !cond_2)){
    d();
  }else if(!cond_0 && !cond_1 &&  cond_2)){
    e();
  }else if( cond_0 && !cond_1 &&  cond_2)){
    f();
  }else if(!cond_0 &&  cond_1 &&  cond_2)){
  g();
  }else if( cond_0 &&  cond_1 &&  cond_2)){
    h();
  }
}
Run Code Online (Sandbox Code Playgroud)

这很长很难读.当添加一个新的布尔条件cond_3时,修改代码是很可怕的:

if(!cond_0 && !cond_1 && !cond_2 && !cond_3){
    a();
  }else if( cond_0 && !cond_1 && !cond_2 !cond_3)){
    b();
  }
  .
  .
  .
Run Code Online (Sandbox Code Playgroud)

有没有办法消除if else,这样cond_0,cond_1和cond_2只能在函数内部出现一次,并且在添加cond_3时也很容易添加新函数?我想要的东西:

var f=function(cond_0,cond_1,cond_2){
  var magic=(000:a,001:b,010:c...);
  magic(cond_0,cond_1,cond_2)();
}
Run Code Online (Sandbox Code Playgroud)

Sla*_*lai 2

因为true数字是 1,true * 2是 2,等等......可能是这样的:

function f(c0, c1, c2) { [a, b, c, d, e, f, g, h][+c0 +c1 * 2 +c2 * 4](); }    // magic
Run Code Online (Sandbox Code Playgroud)