在Javascript中编写分支的最有效方法

时间:2018-06-01 01:42:57

标签: javascript arrays performance

假设我有一个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(); };
}

这似乎是一大堆branching和不必要的检查。什么是一种更具表现力的方式来调用函数?

我考虑过使用eval动态创建函数名称,但是没有更好的方法吗?

3 个答案:

答案 0 :(得分:3)

将函数存储在数组中;

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

然后只需在每次迭代时调用函数:

for (var i=0; i<array.length; i++) {
  array[i]();
}

答案 1 :(得分:2)

使用Object作为地图,或使用switch声明。前者如下所示。

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

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

或者,如果您可以根据i知道函数的名称,则可以从父作用域调用它,例如

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

但是,严格地说,在if语句中(或使用switch)手动编码可能是最高效的。我怀疑它们之间会有显着的性能差异。

答案 2 :(得分:1)

函数可以作为字符串调用,因此window['function' + i]()可以工作,并调用函数。这可能非常有活力。

&#13;
&#13;
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]()
  }
}
&#13;
&#13;
&#13;