假设我有一个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动态创建函数名称,但是没有更好的方法吗?
答案 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]()
可以工作,并调用函数。这可能非常有活力。
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;