2016-08-03 18 views
0

javascriptでこの機能を作成しました。それは非常に多くの巣のif-elseの呼び出しをdoens'tようconvertTimes(90,{symbol:"min"},{symbol:"hour"})リターン1.5時間、分、秒を変換する - クリーナーコード

function convertTimes(oldTimeValue, oldTimeUnits, newTimeUnits){ 
    const newTimeUnitSymbol = newTimeUnits.symbol 

    if (oldTimeUnits.symbol === newTimeUnitSymbol) { return oldTimeValue } 

    if (oldTimeUnits.symbol === "hour") { 
     if (newTimeUnitSymbol === "min") { return oldTimeValue * 60 } 
     else if (newTimeUnitSymbol === "sec") { return oldTimeValue * 3600 } 

    } else if (oldTimeUnits.symbol === "min") { 
     if (newTimeUnitSymbol === "hour") { return oldTimeValue/60 } 
     else if (newTimeUnitSymbol === "sec") { return oldTimeValue * 60 } 

    } else if (oldTimeUnits.symbol === "sec") { 
     if (newTimeUnitSymbol === "hour") { return oldTimeValue/3600 } 
     else if (newTimeUnitSymbol === "min") { return oldTimeValue/60 } 
    } 
} 

を呼び出すたとえば
は、あなたがこのコードを清掃/リファクタリングの方法を提案してもらえますか?

+3

[コードレビュー](http://codereview.stackexchange.com/) –

+2

http://momentjs.comを使用してください。彼らは既にすべての訴訟を取り組んできました。 – Will

答えて

1
var conversions = { 
hour: { 
    min: 60, 
    sec: 3600 
}, 
min: { 
    hour: 1/60, 
    sec: 60 
}, 
sec:{ 
    hour: 1/3600, 
    min: 1/60 
} 
} 

return oldTimeValue * conversions[oldTimeUnits.symbol][newTimeUnitSymbol] 
1

比率にシンボルの組み合わせをマッピングする方法はありますか?

const CONVERSION = { 
    "hour:min":60, 
    "hour:sec":3600, 
    "min:hour":1/60, 
    "min:sec":60, 
    "sec:hour":1/3600, 
    "sec:min":1/60 
} 

function convertTimes(oldTimeValue, oldTimeUnits, newTimeUnits){ 
    // TODO validate symbols 
    if (oldTimeUnits.symbol === newTimeUnits.symbol) { return oldTimeValue } 
    return oldTimeValue * CONVERSION[oldTimeUnits.symbol+":"+newTimeUnits.symbol]; 
} 
関連する問題