【问题标题】:FizzBuzz example in JavaScriptJavaScript 中的 FizzBu​​zz 示例
【发布时间】:2014-06-19 16:58:09
【问题描述】:

通过一些 JS 示例,我为一个 fizzbuzz 问题编写了这个解决方案。它只打印 1..20 和 str 永远不会得到 concat() 值。 有人能解释一下为什么这不起作用吗?

for(i=1; i<=20; i++){
    var str = ''
    if(i%3===0){     
        str.concat('Fizz')
    }
    if(i%5===0){
        str.concat('Buzz')
    }
    if(str===''){
        console.log(i)
    } else {
        console.log(str)
    }
}

更新:由于上述问题是一个简单的语法错误(不想启动新线程),想知道以下是否是在JS中简洁地编写上述答案的好方法

for(i=1; i<=20; i++){
    var str = ''
    i%3===0 ? str = str.concat('Fizz') : false
    i%5===0 ? str = str.concat('Buzz') : false
    str==='' ?  console.log(i) : console.log(str)
}

【问题讨论】:

  • 字符串在 Javascript 中是不可变的。您总是必须分配字符串操作的结果。
  • 我刚刚意识到问题/解决方案,你们已经回复了答案。谢谢。在 JS 中,我需要摆脱 Ruby 的思维模式。
  • JS 中唯一可变的类型是对象和数组。
  • @cdlane 你删除了一个线程只是为了添加一个标签?
  • @MichaelL。是的,有太多新的 fizzbuzz 问题可以很容易地被现有问题回答(在这种情况下,未标记的比标记的要多。)但是会暂停并考虑您的评论。

标签: javascript fizzbuzz


【解决方案1】:

因为String.prototype.concat() 返回包含字符串。

你需要做str = str.concat("XYZ");

【讨论】:

    【解决方案2】:

    str.concat 返回新字符串。它不会修改原始版本。试试

    str = str.concat('Fizz');
    

    【讨论】:

      【解决方案3】:

      更精简的解决方案

      const fizzbuzz = num => {
        let str; 
        for(let i=1; i<=num; i++) {
          str = "";
          if(i%3===0) {
            str = "fizz";
          }
          if(i%5===0) {
            str += "buzz";
          }
          console.log(str || i);
        }
      }
      
      fizzbuzz(100);
      

      【讨论】:

        猜你喜欢
        • 2017-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-21
        • 2018-07-18
        • 2012-11-04
        • 2016-01-15
        • 2015-01-13
        相关资源
        最近更新 更多