2015-07-21 71 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