javascript中长if..else/switch链的替代方案

javascript中长if..else/switch链的替代方案,javascript,Javascript,我在javascript代码中有这样一个长的if-else链(app.60检查),这个长链效率很低,因为如果第60个检查作为输入,那么它就必须不必要地通过59个检查,所以我想这样实现 var ifChecks = function( i ) { if( i === 23 ) { // implementation } else if ( i === 300 ) { // implementation }

我在javascript代码中有这样一个长的if-else链(app.60检查),这个长链效率很低,因为如果第60个检查作为输入,那么它就必须不必要地通过59个检查,所以我想这样实现

 var ifChecks = function( i )
 {
     if( i === 23 )
     {
       // implementation
     }
     else if ( i === 300 )
     {
       // implementation
     }
     else if ... 

  }
有没有其他方法比这个可以用javascript实现的解决方案更好


注意:输入不是序列号,否则我可能会使用数组而不是对象。

我会使用您的想法,编码稍微不同,如下所示:

 var implobj = { 23 : handleimpl1,
                 300 : handleimpl2,
                 .
                 .
                 .
               }
 var handleImpl = function( i )
 {
    implobj[i]();
 }

我唯一不同的做法是将
implobj
作为一个参数。一个开关案例不会使它像映射那样高效。对象文本案例有什么问题吗?问题可能出在其他地方:根据整数值有60个函数真的不同是很不寻常的。每个实现都有意义吗不同?每次调用handleImpl时初始化对象与在全局范围内拥有此对象相比。哪一个更好?实际上,这并不是每次都初始化。外部函数运行一次并返回内部函数。内部用户可以访问在第一次调用中设置的implObj。从那时起,您只需调用
handleImpl(i)。如果您还没有看到立即调用的函数表达式(IIFE),那么绝对值得查找它们。
var handleImpl = (function() {
    var implobj = {
        23 : handleimpl1,
        300 : handleimpl2,
        // ...
        defaultImpl: someDefaultFn
    }

    return function(i) {
        (implobj[i] || implobj.defaultImpl)();
    };
}());