1

通过一些 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)
}
4

3 回答 3

2

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

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

于 2014-06-19T17:00:52.957 回答
0

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

str = str.concat('Fizz');
于 2014-06-19T17:00:50.593 回答
0

更紧凑的解决方案

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);
于 2019-09-17T21:25:43.307 回答