Javascript 转换小时、分钟、秒-清除代码

Javascript 转换小时、分钟、秒-清除代码,javascript,refactoring,Javascript,Refactoring,我用javascript创建了这个函数,可以在不同的时间单位之间进行转换。 例如,调用convertTimes(90,{symbol:“min”},{symbol:“hour”})返回1.5 function convertTimes(oldTimeValue, oldTimeUnits, newTimeUnits){ const newTimeUnitSymbol = newTimeUnits.symbol if (oldTimeUnits.symbol === newTimeUni

我用javascript创建了这个函数,可以在不同的时间单位之间进行转换。
例如,调用
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 }
  }
} 

您能否建议一种重构/清理此代码的方法,这样它就不会嵌套那么多if-else调用?

如何将符号组合映射到比率

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]
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];
} 

如何将符号组合映射到比率

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];
} 
你可能想使用这个功能。他们已经解决了所有的边缘情况。您可能想查看使用情况。他们已经解决了所有的边缘问题。