这是我的代码
for(var i = 1; i <= 20; i = i + 1)
if(i%3==0) {
console.log("Fizz");
}else if (i%5==0){
console.log("Buzz");
}
else {
console.log(i);
}
答案是
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz
16
17
Fizz
19
Buzz
但是看看那个“15”......它说“Fizz”但它应该是“FizzBuzz”,因为它可以被3和5整除!糟糕! 如何为此案例添加特殊条件
答案 0 :(得分:5)
执行if else if
后,您无法传递else if
第一个条件已经过验证。
这是您问题的可能解决方案(有很多,没有非常优雅):
var special = false;
if (i%3==0) {
console.log("Fizz");
special = true
}
if (i%5==0){
console.log("Buzz");
special = true;
}
if (!special) {
console.log(i);
}
这是另一个:
var tolog = '';
if (i%3==0) {
tolog += "Fizz";
}
if (i%5==0){
tolog += "Buzz";
}
console.log(tolog || i);
答案 1 :(得分:3)
你不应该写else if
for(var i = 1; i <= 20; i = i + 1)
if(i%3==0) {
console.log("Fizz");
}
if (i%5==0){
console.log("Buzz");
}
if (i%5 && i%3) {
console.log(i);
}
}
答案 2 :(得分:2)
如果使用if-else
,则只执行其中一个分支。你需要有不同的结构。
for (var i ... ) {
if (i % 3 !== 0 && i % 5 !== 0) {
console.log(i);
} else {
if (i % 3 === 0) { console.log('Fizz'); }
if (i % 5 === 0) { console.log('Buzz'); }
}
}
答案 3 :(得分:1)
不要立即采取行动,而是花些时间进一步考虑您的意见。如果你小心,你可以避免重复操作,如一对mods(%3&amp;%5)。
var result;
for(var i = 1; i <= 20; i = i + 1)
{
result = '';
if(i%3==0)
result += 'Fizz';
if(i%5==0)
result += 'Buzz';
// if neither of the two preceding statements assigned a value to result
// then it's not divisible by either - just print the number.
if (result.length == 0)
result = i;
console.log(result);
}
答案 4 :(得分:1)
我会将 of 结构分组,如此
var i = 0;
while( ++i < 21 ){
if ( i % 3 === 0 ) {
if ( i % 5 === 0 ) console.log('FizzBuzz'); // Special case
else console.log('Fizz');
}
else if ( i % 5 === 0 ) {
console.log('Buzz');
}
else console.log(i);
}
jsPerf这里给出的一些答案。