2015-07-21 66 views
0

我在javascript中有一个开关,我需要把它与众不同。 如何以更好的方式编写此文件以避免切换?替换JavaScript的swich语句

var types = { 
    Int: 2, 
    Short: 3, 
    Long: 4, 
    Double: 5, 
    Decimal: 6, 
    String: 1, 
    Guid: 10, 
    Variant: 11,    
}; 

switch (data.columnTypeId) { 

    case types.String: 
    case types.Guid: 
    case types.Variant: 
     self.GetStrings(data); 
     break; 

    case types.Int: 
    case types.Decimal: 
    case types.Short: 
    case types.Long:       
    case types.Double: 
     self.GetNumbers(data); 
     break; 

    default: 
} 
+0

有什么不对的代码?我看起来很棒。 –

+2

一大堆'如果'?也许如果你解释*为什么*你需要替换完美的代码... –

+0

我不想在开关中重复不同的情况 – cmonti

回答

0

如何做同样的地图,但映射函数引用呢?

var columnTypes = { 
    2: self.GetNumbers, 
    3: self.GetNumbers, 
    4: self.GetNumbers, 
    5: self.GetNumbers, 
    6: self.GetNumbers, 
    1: self.GetStrings, 
    10: self.GetStrings, 
    11: self.GetStrings, 
    0: self.GetDefault //Guessing the default value would be 0   
}; 

columnTypes[data.columnTypeId](data); 

或安全检查:

if (columnTypes.indexOf(data.columnTypeId) !== -1) { 
    columnTypes[data.columnTypeId](data); 
} else { 
    self.GetDefault(data); 
} 

或者作为@dandavis指出了评论:

columnTypes[data.columnTypeId || self.getDefault](data); 
+0

你已经失去了'default'动作(当然,这并没有在问题中显示,但指定了'default'的情况)。 –

+0

好的。很高兴知道默认情况是什么。 – taxicala

+0

'columnTypes [data.columnTypeId || self.getDefault](data);' – dandavis