不用if语句根据条件执行不同的函数

Execute different functions based on conditions without if statements

有没有更好的approach/coding风格在不同条件下执行不同的功能而不使用if语句?

我在 JavaScript 中按以下方式编码:(例如,不同条件下的函数可能使用 API 中的不同提取方法)

if(answer == 'a'){
  foo()

if(answer == 'b'){
  bar()

if(answer == 'c'){
  bar_2()

if(answer == 'd'){
  foo_3()

我考虑过使用 eval(),但这是一个好方法吗?例如,创建一个对象包含作为条件的键和作为 属性.

的函数名称
conditions:{
  a: 'foo',
  b: 'bar',
  c: 'foo_2',
  d: 'bar_2',
}

和运行它喜欢eval(this.conditions[a])

但我也听说使用eval会很难测试

您使用键指向函数标识符。你最好使用键指向函数:

conditions:{
  a: () => {
    // body of foo
  },
  b: () => {
    // body of bar
  },
  c: () => {
    // body of foo_2
  },
  d: () => {
    // body of bar_2
  }
}

conditions[ your_key ]();

是的,您可以使用函数构建条件对象并调用它们:

function foo(){...}
function bar(){...}

var conditions : {
    'a': foo,
    'b': bar,
}

conditions[answer]()

注意:尽量不要使用 eval 如果您不知道自己在做什么,可能会存在安全风险

您可以定义对函数的引用或在每个条件下执行

const doSomething = (args) => {
    // do something
}
const doSomethingElse = (args) => {
    // do something else
}

const conditions = {
    a: doSomething,
    b: doSomethingElse
};

// and then
const result = conditions[answer](params);

甚至函数引用列表

const conditions = {
    a: [
        doSomething,
    ],
    b: [
        doSomething,
        doSomethingElse
    ]
};
// and then
const results = conditions[ answer ].map(method => method());

您可以像这样创建函数:

this['some answer'] = function() {...}

然后这样称呼它

this[answer]()