首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将If-Else语句转换为Switch语句

将If-Else语句转换为Switch语句
EN

Stack Overflow用户
提问于 2016-11-28 17:33:55
回答 2查看 2.6K关注 0票数 0

最近,我使用if- use语句在CodeWars中完成了一个问题,但是我想重试它并使用一个开关语句。可惜它没有像我想的那样工作!

我要解决的问题是,一名铁人三项运动员已经完成并返回了一个物体,根据运动员是否应该游泳、骑自行车或跑步的长度值来显示关键。

我的如果-其他解决方案:

代码语言:javascript
运行
复制
function iTri(s) {  
  var triLength = 140.60;  
  var result = {};  
  var str = ' to go!';  
  var lengthLeft = (triLength - s).toFixed(2);  

  if (s === 0) {
    return 'Starting Line... Good Luck!';
  } else if (s <= 2.4) {
    result.Swim = lengthLeft + str;
  } else if (s <= 114.4) {
    result.Bike = lengthLeft + str;
  } else if (s < 130.60) {
    result.Run = lengthLeft + str;
  } else if (s < 140.60) {
    result.Run = 'Nearly there!';
  } else {
    return 'You\'re done! Stop running!';
  }
  return result;
  }

(不工作)开关语句:

代码语言:javascript
运行
复制
function iTri(s){
  let tri = (2.4 + 112 + 26.2).toFixed(2);
  let left = tri - s;
  let str = ' to go!'
  let result = {};

  switch(s) {
    case (s === 0):
      return "Starting Line... Good Luck!";
      break;
    case (s <= 2.4):
      result.Swim = left + str;
      return result;
      break;
    case (s <= 114.4):
      result.Bike = left + str;
      return result;
      break;
    case (s <= 130.60):
      result.Run = left + str;
      return result;
      break;
    case (s < 140.60):
      result.Run = 'Nearly there!';
      return result;
      break;
    default:
      return 'You\'re done! Stop running!';
  }
}

这些都是测试:

代码语言:javascript
运行
复制
Test.describe("Example tests",_=>{
Test.assertSimilar(iTri(36),{'Bike':'104.60 to go!'});
Test.assertSimilar(iTri(103.5),{'Bike':'37.10 to go!'});
Test.assertSimilar(iTri(2),{'Swim':'138.60 to go!'});
});

以及产出:

代码语言:javascript
运行
复制
✘ Expected: '{ Bike: \'104.60 to go!\' }', instead got: '\'You\\\'re done! Stop running!\''
✘ Expected: '{ Bike: \'37.10 to go!\' }', instead got: '\'You\\\'re done! Stop running!\''
✘ Expected: '{ Swim: \'138.60 to go!\' }', instead got: '\'You\\\'re done! Stop running!\''  

另外,将其转换为switch语句值得吗?这样做有什么好处/缺点,就像/else.开关?

EN

回答 2

Stack Overflow用户

发布于 2016-11-28 17:47:37

是否值得尝试将其转换为switch语句?

不是的。只有在有多个精确匹配的情况下,switch才会有用。对你来说不是这样。

票数 1
EN

Stack Overflow用户

发布于 2016-11-28 18:45:59

如果稍微将问题转过来,那么您可以像这样使用开关。您的交换机已经非常接近于此了。

代码语言:javascript
运行
复制
function iTri(s) {  
  var triLength = 140.60;  
  var result = {};  
  var str = ' to go!';  
  var lengthLeft = (triLength - s).toFixed(2);  

  switch(true) {
      case s === 0:
        return 'Starting Line... Good Luck!';
      case s <= 2.4:
        result.Swim = lengthLeft + str;
        break;
      case s <= 114.4:
        result.Bike = lengthLeft + str;
        break;
      case s < 130.60:
        result.Run = lengthLeft + str;
        break;
      case s < 140.60:
        result.Run = 'Nearly there!';
        break;
      default:
        return 'You\'re done! Stop running!';
  }
  
  return result;
}

console.log(iTri(0));
console.log(iTri(2));
console.log(iTri(50));
console.log(iTri(120));
console.log(iTri(135));
console.log(iTri(145));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40850229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档