【问题标题】:Fizz Buzz question with extra difficulty layer带有额外难度层的 Fizz Buzz 问题
【发布时间】:2019-11-27 20:51:21
【问题描述】:

我正在尝试用一个额外的层来解决 Fizz Buzz 问题。

这是我目前所拥有的。所有这一切都很好,但我需要一个额外的条件。

这是 JS 单元测试

对于任何其他输入(有效或其他)返回输入的字符串表示

printFizzBuzz = function(input) {

  // Your code goes here
  for (var i = 1; i <= 20; i++) {

    if (i % 3 === 0 && i % 5 === 0) {
      console.log("FizzBuzz");
    } else if (i % 3 === 0) {
      console.log("FizzBuzz");
    } else if (i % 5 === 0) {
      console.log("Buzz");
    } else {
      console.log(i);
    }
  }
};

谢谢!

【问题讨论】:

  • 最好使用switch(i)而不是大量的else if语句
  • @DavidBradshaw 非常不同意,switch 不必要地更冗长且容易出错(对于经常忘记break 的新手)。猜猜这是基于意见的
  • @CertainPerformance,这就是我们让 esLint 发现此类错误的原因。当我面试候选人时,我希望他们能够使用switch 声明
  • @DavidBradshaw 当然,知道 如何 它可以使用是好的,因为语法存在,并且知道语法是有用的,但这并不意味着它 应该使用,IMO
  • 您的问题集中在:为了测试函数printFizzBuzz JS(或者,究竟是哪个测试脚本,测试框架?)需要string 作为返回?你需要类似string-builder 而不是console.log。然后循环完成后,您可以返回构建的字符串。

标签: javascript fizzbuzz


【解决方案1】:

您可以使用.toString() (JS toString) 更改字符串中的数字:

function printFizzBuzz(input) {

  // Your code goes here
  for (var i = 1; i <= 20; i++) {

    if (i % 3 === 0 && i % 5 === 0) {
      console.log("FizzBuzz");
    } else if (i % 3 === 0) {
      console.log("FizzBuzz");
    } else if (i % 5 === 0) {
      console.log("Buzz");
    } else {
      console.log(i.toString());
    }
  }
};

printFizzBuzz();

【讨论】:

    【解决方案2】:

    看这个问题,它不是要求循环,而是要求传递给函数的任何值。所以答案应该更像这样

    function printFizzBuzz(input) {
    
      // Your code goes here
    
      if (typeof input !== ‘number’) {
        return String(input)
      }
    
      let by3 = input % 3
      let by5 = input % 5
    
      switch(0) {
        case by3 + by5:
          return "FizzBuzz"
    
        case by3:
          return "Fizz"
    
        case by5:
          return "Buzz"
    
        default:
          return input.toString()
        }
      }
    }
    

    【讨论】:

      【解决方案3】:

      如果我是面试官,我希望答案看起来更像这样

      function printFizzBuzz(input) {
      
        // Your code goes here
      
        for (var i = 1; i <= 20; i++) {
      
          let by3 = i % 3
          let by5 = i % 5
      
          switch(0) {
            case by3 + by5:
              console.log("FizzBuzz")
              break
      
            case by3:
              console.log("Fizz")
              break
      
             case by5:
               console.log("Buzz")
               break
      
             default:
               console.log(i.toString())
            }
          }
        }
      }
      
      printFizzBuzz()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-07
        • 2018-02-02
        • 1970-01-01
        • 1970-01-01
        • 2014-03-06
        • 2020-04-22
        • 1970-01-01
        相关资源
        最近更新 更多