Самый эффективный способ кодирования веток в Javascript - PullRequest
0 голосов
/ 01 июня 2018

Скажем, у меня есть массив Javascript, который содержит числа от 0 до 5. Каждое из чисел на самом деле является инструкцией для вызова определенной функции.Например:

var array = [lots of data];

for(i=0; i<array.length; i++){
  if(i == 0){ function0(); };
  if(i == 1){ function1(); };
  if(i == 2){ function2(); };
  if(i == 3){ function3(); };
  if(i == 4){ function4(); };
  if(i == 5){ function5(); };
}

Это похоже на ужасное количество ветвлений и ненужных проверок.Что может быть более эффективным способом вызова функции?

Я думал о динамическом создании имен функций с использованием eval , но разве нет лучшего способа?

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

Сохраните функции в массиве;

var array = [function0, function1, ..., functionN];

, а затем просто вызовите функции на каждой итерации:

for (var i=0; i<array.length; i++) {
  array[i]();
}
0 голосов
/ 01 июня 2018

Функции могут быть вызваны как строки, поэтому window['function' + i]() будет работать и вызывать функцию.Это может быть очень динамично.

var array = [0, 1, 2];

function function0() { console.log('Function 0') }
function function1() { console.log('Function 1') }
function function2() { console.log('Function 2') }

for (i = 0; i < array.length; i++) {
  if (typeof window['function' + i] == 'function') {
    window['function' + i]()
  }
}
0 голосов
/ 01 июня 2018

Используйте Object в качестве карты или используйте оператор switch.Первое показано ниже.

const functionMap = {
    0: function0,
    1: function1,
    2: function2
};

array.foreach(i => functionMap[i]());

В качестве альтернативы, если вы можете узнать имя функции, основанное на i, вы можете вызвать его из родительской области, например,

window[`function${i}`]()

Однако, строго говоря, ручное кодирование в операторах if (или использование switch) может быть наиболее эффективным.Я сомневаюсь, что между ними будет существенная разница в производительности.

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