Выполнение различных функций на основе условий без операторов if - PullRequest
0 голосов
/ 14 сентября 2018

Есть ли лучший подход / стиль кодирования для выполнения различных функций при разных условиях без с использованием операторов 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 будет затруднительно для тестирования.

Ответы [ 4 ]

0 голосов
/ 14 сентября 2018

Вы можете создать такие функции, как:

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

И затем вызывать их как

this[answer]()
0 голосов
/ 14 сентября 2018

Да, вы можете построить объект условий с помощью функции и вызвать их:

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

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

conditions[answer]()

Примечание: старайтесь не использовать eval всегда, когда это возможно, оно имеет угрозу безопасности, если вы не знаете, что делаете

0 голосов
/ 14 сентября 2018

Вы можете определить ссылку на функцию или выполнить при каждом условии

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());
0 голосов
/ 14 сентября 2018

Вы используете клавишу, чтобы указать на идентификатор функции. Вам лучше использовать клавишу, чтобы указать на функцию:

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

conditions[ your_key ]();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...