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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据条件执行不同的函数而不使用if语句相关的知识,希望对你有一定的参考价值。

是否有更好的方法/编码风格在不使用if语句的情况下在不同条件下执行不同的函数?

我在javascript中使用以下方式进行编码:(例如,不同条件下的函数可能使用API​​中的不同fetch方法)

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很难进行测试。

答案

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

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

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

conditions[answer]()

注意:如果您不知道自己在做什么,请尽量不要使用eval它有安全隐患

另一答案

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

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

conditions[ your_key ]();
另一答案

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

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]()

以上是关于根据条件执行不同的函数而不使用if语句的主要内容,如果未能解决你的问题,请参考以下文章

JS语句和数组

1.30 if语句

Shell中的if和case判断语句

Shell中的if和case判断语句

PHP条件控制语句之“if语句”

根据@variable,根据IF条件执行不同的WHERE语句?