JS - 我的循环和if语句打印出错误的字符串?

时间:2016-09-23 14:24:54

标签: javascript if-statement for-loop

我的循环似乎打印出错误的字符串。我需要15来打印出fizzbuzz。对我来说似乎应该。

 var numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];

 for (i=0; i < numbers.length; i++)
     if (numbers[i]%3 === 0 && numbers % 5 !== 0 ){
         console.log("Fizz");
     } else if (numbers[i] % 5 === 0 && numbers[i] % 3 !== 0) {
         console.log("Buzz");
     } else if (numbers[i] % 3 === 0 && numbers[i]%5 === 0) {
         console.log("FizzBuzz"); 
     } else {
         console.log(numbers[i]);
     } 
};

1 个答案:

答案 0 :(得分:0)

那是因为你在第4行写了numbers % 5而不是numbers[i] % 5

作为一般规则,将迭代器存储在变量中非常重要,以避免这种情况(并缓存值而不是每次都检索它)。如果可以,请使用for..of ES6语法,这样可以使编写更容易,更易读,更不容易出错。

for (const number of numbers) {
   if (number % 3 === 0 && number % 5 !== 0 ){
     console.log("Fizz");
   } else if (number % 5 === 0 && number % 3 !== 0) {
     console.log("Buzz");
   } else if (number % 3 === 0 && number%5 === 0) {
     console.log("FizzBuzz"); 
   } else {
     console.log(numbers[i]);
   }
}

请记住,Fizzbuzz测试是一个简单的面试问题,由制作StackOverflow的人想象。在此测试中失败不是一个选项:)因此,训练您的代码样式以编写容易出错的代码。

在多个if / else语句中测试之前,尝试将您将考虑的值存储在变量中,例如,这是一个好习惯,它使代码更易读,更容易调试。看到这里,通过不这样做,你花了很多时间来理解错误,并不得不问这个问题。想想如果它是一个真正的行业代码,它将拥有的成本。

祝你好运,代码安全:)