首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript中的简单电梯

javascript中的简单电梯
EN

Stack Overflow用户
提问于 2018-04-18 07:28:55
回答 2查看 1.4K关注 0票数 0

我试图为在codewars.com上发现的以下挑战问题编写一个解决方案:

有一座四层的房子。那所房子里有一部电梯。您可以编程这个电梯上或下,取决于用户触摸电梯内的按钮。

有效级别只能是以下数字:0、1、2、3

有效的按钮只能是以下字符串:'0','1','2','3‘

可能的返回值是以下数字:-3,-2,-1,0,1,2,3

如果电梯在一楼(第0层),用户触摸按钮“2”,电梯必须上升2层,所以我们的功能必须返回2。

如果电梯在第三层,用户点击“0”按钮,电梯必须下降3层,所以我们的功能必须返回-3。

如果电梯在第二层,用户触摸按钮“2”,电梯必须保持在相同的水平,所以我们返回0。

我们不能危及乘客的生命,因此,如果我们得到了不合时宜的投入,我们的电梯必须保持在同一水平上。例如:

  • goto(2,'4')必须返回0,因为电梯中没有“4”按钮。
  • goto(4,'0')必须返回0,因为没有级别4。
  • goto(3,undefined)必须返回0。
  • goto(undefined,'2')必须返回0。
  • goto([],'2')必须返回0,因为输入级别的类型是数组而不是数字。
  • goto(3,{})必须返回0,因为输入按钮的类型是对象而不是字符串。

我可以想出以下的代码,但我失败了大约40%的测试用例。有人能告诉我我的逻辑哪里错了吗?

代码语言:javascript
复制
function goto(level,button){
    var arr = [0, 1, 2, 3];
    var result = 0

    for(var i = 0; i < arr.length; i++){
        for(var j = 0; j < arr.length; j++){
            if(level === arr[i] && button === arr[j]){
                if(level < button){
                    result = level + button;
                }else{
                    result = button - level;
                }
            }
        }
    }

    return result;
}

我正在重构我的代码,但我仍然失败了31个测试用例中的一个,并给出了以下消息:

预期: 0,而不是got: 1

重构代码:

代码语言:javascript
复制
function goto(level,button){
var valid = [0, 1, 2, 3];
button = Number(button);

if (typeof level === 'number' && typeof button === 'number') {
  for(var i = 0; i < valid.length; i++){
    for(var j = 0; j < valid.length; j++){
        if(level === valid[i] && button === valid[j]){
               return button - level;
          }
       }
   }
 }
  return  0;
 }
EN

回答 2

Stack Overflow用户

发布于 2018-04-18 07:47:20

我怀疑这是因为级别是一个数字,然而按钮是一个字符串。在javascript中,由于类型转换:

代码语言:javascript
复制
3 - '2'; // return 1 
3 + '2';  // return '32';

使用函数Number()将按钮字符串转换为数字,您将具有所需的真正添加行为。

票数 1
EN

Stack Overflow用户

发布于 2018-04-18 07:49:52

您应该先进行数据格式检查,并使计算结果过于复杂。

它应按以下方式工作。

代码语言:javascript
复制
function goto(level,button){
    var floors = [0, 1, 2, 3];

    var level_num = parseInt(level);
    var button_num = parseInt(button);

    if (typeof floors[level_num] == 'undefined' || typeof floors[button_num] == 'undefined') {
        return 0;
    }

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

https://stackoverflow.com/questions/49893674

复制
相关文章

相似问题

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