javascript js数组中的FizzBuzz测验

tjjdgumg  于 2023-04-04  发布在  Java
关注(0)|答案(4)|浏览(101)

尝试编写一个fizzBuzz测验,使用chrome JavaScript控制台为数组中的任何数字生成单词"fizz",并为可被5整除的数字生成单词"Buzz",最后为可被5和3整除的数字生成单词"fizzBuzz"
这段代码只是打印数字,而不替换为单词fizz和Buzz。
我希望继续在控制台中输入函数fizzBuzz(),以便继续生成其他数字,我的问题是,为什么不起作用?
我期望的结果如下:

[1,2,"Buzz",4,"Fizz","Buzz",7,8,"Buzz","Fizz",11,"Buzz",13,14,"FizzBuzz"]

但我得到的却是:

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

这是我的当前代码:

var output=[];
var previous = 1;
function fizzBuzz(){
    if (output[(previous-1)]%5===0 && output[(previous-1)]%3===0){
        output.push(("FizzBuzz"));
        console.log(output);
        previous++;
    }
    else if (output[(previous-1)]%5===0){
         output.push("Fizz");
        console.log(output);
        previous++;
        
    }
    else if (output[(previous-1)]%3===0){
         output.push("Buzz");
        console.log(output);
        previous++;
    }
    else {
        output.push(previous);
        console.log(output);
        previous++;
        
    }
    
    
}
jdzmm42g

jdzmm42g1#

所以在检查了你的建议后,我改变了我的算法,这个算法有效,

var output = []
var previous = 1
function fizzBuzz(){
    if (previous % 5 === 0 && previous % 3 === 0){
        output.push(("FizzBuzz"));
        console.log(output);
        previous++;
    }
    else if (previous  % 5 === 0){
         output.push("Fizz");
        console.log(output);
        previous++;
        
    }
    else if (previous % 3 === 0){
         output.push("Buzz");
        console.log(output);
        previous++;
    }
    else {
        output.push(previous);
        console.log(output);
        previous++;
        
    }
    
    
}
vcudknz3

vcudknz32#

不声明其他变量而获得相同结果的一种更简单的方法是改变原始数组。

function fizzBuzz(array) {
  array.forEach((element) => {
    if (element % 5 === 0 && element % 3 === 0) {
      array[array.indexOf(element)] = 'FizzBuzz';
    } else if (element % 5 === 0) {
      array[array.indexOf(element)] = 'Fizz';
    } else if (element % 3 === 0) {
      array[array.indexOf(element)] = 'Buzz';
    }
  });

  return array;
}
6ss1mwsb

6ss1mwsb3#

使用生成器函数而不是保留全局变量怎么样!例如

function* fizzBuzz(length = 15) {
  for (let i = 1; i <= length; i++) {
    let value = i;
    if (i % 15 === 0) {
      value = 'FizzBuzz';
    } else if (i % 5 === 0) {
      value = 'Fizz';
    } else if (i % 3 === 0) {
      value = 'Buzz';
    }
    yield value;
  }
}

for (const i of fizzBuzz()) {
  console.log(i);
}

或者一个行为类似于生成器的闭包

const fizzBuzz = (function(length = 15) {
  const result = Array.from({
    length
  }, (_, i) => {
    if ((i + 1) % 15 === 0) {
      return 'FizzBuzz';
    } else if ((i + 1) % 5 === 0) {
      return 'Fizz';
    } else if ((i + 1) % 3 === 0) {
      return 'Buzz';
    }
    return (i + 1);
  });
  let index = 0;

  return () => {
    if (index >= length) {
      index = 0;
    }
    return result[index++];
  };
})();

console.log(fizzBuzz());
console.log(fizzBuzz());
console.log(fizzBuzz());
console.log(fizzBuzz());
console.log(fizzBuzz());
r9f1avp5

r9f1avp54#

你可以看看这个:D

function fizzBuzz (){
    const arr = Array.from({length: 15}, (v, i) => i + 1).map((v) => v = (v % 3 == 0 ?  "Fizz" : "") + (v % 5 == 0 ? "Buzz" : "") || v)
    console.log(arr)
}
fizzBuzz()

相关问题