FizzBu​​zz程序在Javascript(详细情况进行说明)(FizzBuzz program

2019-09-04 04:55发布

可有人请纠正FizzBu​​zz这段代码我的? 似乎有一个小错误。 下面这个代码打印所有的号码,而不是仅打印不属于被3整除或5个号码。

编写打印的数字从程序1100 。 但对于三,打印的倍数"Fizz" ,而不是数量,并为五个,打印的倍数"Buzz" 。 对于这两者都是三和五,打印的倍数的数字"FizzBuzz"

function isDivisible(numa, num) {
  if (numa % num == 0) {
    return true;
  } else {
    return false;
  }
};

function by3(num) {
  if (isDivisible(num, 3)) {
    console.log("Fizz");
  } else {
    return false;
  }
};

function by5(num) {
  if (isDivisible(num, 5)) {
    console.log("Buzz");
  } else {
    return false;
  }
};

for (var a=1; a<=100; a++) {
  if (by3(a)) {
    by3(a);
    if (by5(a)) {
      by5(a);
      console.log("\n");
    } else {
      console.log("\n");
    }
  } else if (by5(a)) {
    by5(a);
    console.log("\n");
  } else {
    console.log(a+"\n")
  }
}

Answer 1:

/*Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”*/

var str="",x,y,a;
for (a=1;a<=100;a++)
{
    x = a%3 ==0;
    y = a%5 ==0;
    if(x)
    {
        str+="fizz"
    }
    if (y)
    {
        str+="buzz"
    }
    if (!(x||y))
    {
        str+=a;
    }
    str+="\n"
}
console.log(str);

你的函数返回值falsy不管是什么,但无论如何都会打印。 没有必要让这个过于复杂。

小提琴: http://jsfiddle.net/ben336/7c9KN/



Answer 2:

for (let i = 1; i <= 100; i++) {
    let out = '';
    if (i % 3 === 0) out += 'Fizz';
    if (i % 5 === 0) out += 'Buzz';
    console.log(out || i);
}

又有点票友,允许一些配置:

 function* fizzBuzz(max = 100, config = [[3, 'Fizz'], [5, 'Buzz']]) { for (let i = 1; i <= max; i++) { let out = ''; for (let [n, str] of config) { if (i % n === 0) out += str; } yield out || String(i); } } const iter = fizzBuzz(100, [ [3, 'Fizz'], [9, 'Bang'], [15, 'Buzz'], ]); for (const out of iter) { document.write(`<li>${out}`); } 



Answer 3:

在打打闹闹与FizzBu​​zz和JavaScript作为对比C#。

这里是我的版本,通过更严重影响rigid的语言:

function FizzBuzz(aTarget) {
    for (var i = 1; i <= aTarget; i++) {
        var result = "";
        if (i%3 === 0) result += "Fizz";        
        if (i%5 === 0) result += "Buzz";
        if (result.length ===0) result = i;

        console.log(result);
    }
}

我喜欢读的结构和易用性。

现在, 特雷弗·狄克逊巧妙所做的是继电器的语言(的假y值falsenullundefined'' (空字符串), 0NaN (非数字)),以缩短代码。
现在, if (result.length ===0) result = i; 线是多余的代码将是这样的:

function FizzBuzz(aTarget) {
    for (var i = 1; i <= aTarget; i++) {
        var result = "";
        if (i%3 === 0) result += "Fizz";        
        if (i%5 === 0) result += "Buzz";

        console.log(result || i);
    }
}

在此,我们转播的|| 运营商说:“如果result是假的,打印迭代值( i )”。 酷技巧,我想我需要为了吸收这个逻辑用JavaScript来发挥更多功能。

你可以看到其他的例子(从GitHub上 ),将范围从之类的东西:

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

不变量这里,只是检查除以15,3和5(我上面的一个只有3 5将,但有一个额外的变量,所以我想这是到microbenchmarking对于那些谁照顾,或风格偏好)。

至:

for(i=0;i<100;)console.log((++i%3?'':'Fizz')+(i%5?'':'Buzz')||i)

其中,所有这一切在上线,中继的事实, 0是一个虚假的值,这样你就可以使用了if-else缺兵少将的版本( ? : ),除了|| 欺骗我们以前见过。

下面是一个更具可读性版本以上,具有一定的变数:

for (var i = 1; i <= 100; i++) {
  var f = i % 3 == 0, b = i % 5 == 0;
  console.log(f ? b ? "FizzBuzz" : "Fizz" : b ? "Buzz" : i);
}

总而言之,你可以以不同的方式,我希望你拿起一些漂亮的技巧在JavaScript中使用:)



Answer 4:

随着三元运算它是非常简单的:

    for (var i = 0; i <= 100; i++) {
      str = (i % 5 == 0 && i % 3 == 0) ? "FizzBuzz" : (i % 3 == 0 ? "Fizz" : (i % 5 == 0) ? "Buzz" : i);
      console.log(str);
    }


Answer 5:

for(i = 1; i < 101; i++) {  
  if(i % 3 === 0) {
      if(i % 5 === 0) {
          console.log("FizzBuzz");
      }
      else {
          console.log("Fizz");
      }
  }
  else if(i % 5 === 0) {
      console.log("Buzz");
  }
  else {
      console.log(i)
  }
}


Answer 6:

在您的by3by5功能,您隐返回undefined ,如果它是适用的, false ,如果是不适用的,但你if语句测试,如果它返回truefalse 。 返回true明确是否适用所以你if声明捡起来。



Answer 7:

作为一个ES6发生器: http://www.es6fiddle.net/i9lhnt2v/

function* FizzBuzz() {

    let index = 0;

    while (true) {

        let value = ''; index++;

        if (index % 3 === 0) value += 'Fizz';
        if (index % 5 === 0) value += 'Buzz';

        yield value || index;

    }

}

let fb = FizzBuzz();
for (let index = 0; index < 100; index++) {
    console.log(fb.next().value);
}


Answer 8:

Codeacademy窜出FizzBu​​zz上我今晚。 我有一个模糊的记忆,这是“一件事情”,所以我这样做。 不是最好的方式,也许,但是从上面的不同:

var data = {
    Fizz:3,
    Buzz:5
};

for (var i=1;i<=100;i++) {
    var value = '';
    for (var k in data) {
        value += i%data[k]?'':k;
    }
    console.log(value?value:i);
}

它依赖于数据,而不是代码。 我认为,如果有一个优势,这种方法,那就是你可以去FizzBu​​zzBing 3 5 7或进一步无需增加额外的逻辑,只要你在指定的规则指定的顺序对象元素。 例如:

var data = {
    Fizz:3,
    Buzz:5,
    Bing:7,
    Boom:11,
    Zing:13
};

for (var i=1;i<=1000;i++) {
    var value = '';
    for (var k in data) {
        value += i%data[k]?'':k;
    }
    console.log(value?value:i);
}


Answer 9:

这是我写的:

for (var num = 1; num<101; num = num + 1) {
    if (num % 5 == 0 && num % 3 == 0) {
        console.log("FizzBuzz");
    }
    else if (num % 5 == 0) {
        console.log("Buzz");
    }
    else if (num % 3 == 0) {
        console.log("Fizz");
    }
    else {
        console.log(num);
    }
}


Answer 10:

for (var i = 1; i <= 100; i++) {
    if (i % 3 === 0 && i % 5 === 0) console.log("FizzBuzz");
    else if (i%3 === 0) console.log("Fizz");    
    else if (i%5 === 0) console.log("Buzz");    
    else console.log(i);    
}

一到FizzBu​​zz最简单的方法。 的3和5的多个,在同一时间,装置的15的倍数。

第二个版本:

for (var i = 1; i <= 100; i++) {
    if (i % 15 === 0) console.log("FizzBuzz");
    else if (i%3 === 0) console.log("Fizz");    
    else if (i%5 === 0) console.log("Buzz");    
    else console.log(i);    
}


Answer 11:

for (i=1; i<=100; i++) {
  output = "";
  if (i%5==0) output = "buzz"; 
  if (i%3==0) output = "fizz" + output;
  if (output=="") output = i;
  console.log(output);
}


Answer 12:

实用的风格! JSBin演示

// create a iterable array with a length of 100
// and map every value to a random number from 1 to a 100
var series = Array.apply(null, Array(100)).map(function() {
  return Math.round(Math.random() * 100) + 1;
});

// define the fizzbuzz function which takes an interger as input
// it evaluates the case expressions similar to Haskell's guards
var fizzbuzz = function (item) {
  switch (true) {
    case item % 15 === 0:
      console.log('fizzbuzz');
      break;
    case item % 3 === 0:
      console.log('fizz');
      break;
    case item % 5 === 0:
      console.log('buzz');
      break;
    default:
      console.log(item);
      break;
  }
};

// map the series values to the fizzbuzz function
series.map(fizzbuzz);


Answer 13:

另一种解决方案,避免多余的分裂和消除“嘶嘶声”和“嗡嗡”之间过量的空间:

    var num  = 1;
    var FIZZ = 3;   // why not make this easily modded?
    var BUZZ = 5;   // ditto
    var UPTO = 100; // ditto
                    // and easily extended to other effervescent sounds

    while (num < UPTO)
    {
        var flag = false;
        if (num % FIZZ == 0) { document.write ("Fizz"); flag = true; }
        if (num % BUZZ == 0) { document.write ("Buzz"); flag = true; }
        if (flag == false)   { document.write (num); }
        document.write ("<br>");
        num += 1;
    }

如果您使用的JScript / JSC / .NET中使用,使用Console.Write()。 如果您使用Node.js的使用,使用process.stdout.write()。 不幸的是,执行console.log()追加换行符和退格忽略,所以它不能用于此目的。 你也很可能追加到一个字符串,并打印出来。 (我是一个完整的n00b,但我认为(好吧, 希望 )我已经彻底合理的。)

“那么,有什么想,先生们?”



Answer 14:

看一下这个!

function fizzBuzz(){
    for(var i=1; i<=100; i++){
        if(i % 3 ===0 && i % 5===0){
            console.log(i+' fizzBuzz');
        } else if(i % 3 ===0){
            console.log(i+' fizz');
        } else if(i % 5 ===0){
            console.log(i+' buzz');
        } else {
            console.log(i);
        }
    } 
}fizzBuzz();


Answer 15:

稍有不同的实现。

你可以把自己的论据到函数。 可以是不连续的号码,如[0,3,10,1,4]。 默认设置是只从1-15。

 function fizzbuzz (set) { var set = set ? set : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] var isValidSet = set.map((element) => {if (typeof element !== 'number') {return false} else return true}).indexOf(false) === -1 ? true : false var gotFizz = (n) => {if (n % 3 === 0) {return true} else return false} var gotBuzz = (n) => {if (n % 5 === 0) {return true} else return false} if (!Array.isArray(set)) return new Error('First argument must an array with "Number" elements') if (!isValidSet) return new Error('The elements of the first argument must all be "Numbers"') set.forEach((n) => { if (gotFizz(n) && gotBuzz(n)) return console.log('fizzbuzz') if (gotFizz(n)) return console.log('fizz') if (gotBuzz(n)) return console.log('buzz') else return console.log(n) }) } 



Answer 16:

 var num = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]; var runLoop = function() { for (var i = 1; i<=num.length; i++) { if (i % 5 === 0 && i % 3 === 0) { console.log("FizzBuzz"); } else if (i % 5 === 0) { console.log("Buzz"); } else if (i % 3 === 0) { console.log("Fizz"); } else { console.log(i); } } }; runLoop(); 



Answer 17:

想和大家分享我的方式来解决这个问题

for (i = 1; i <= 100; i++){
  if (i % 3 === 0 && i % 5 === 0) {
    console.log('fizzBuzz');
  } else if (i % 3 === 0) {
    console.log('fizz');
  } else if (i % 5 === 0){
    console.log('buzz');
  } else {
    console.log(i);
  }
}


Answer 18:

 var limit = prompt("Enter the number limit"); var n = parseInt(limit); var series = 0; for(i=1;i<n;i++){ series = series+" " +check(); } function check() { var result; if (i%3==0 && i%5==0) { // check whether the number is divisible by both 3 and 5 result = "fizzbuzz "; // if so, return fizzbuzz return result; } else if (i%3==0) { // check whether the number is divisible by 3 result = "fizz "; // if so, return fizz return result; } else if (i%5==0) { // check whether the number is divisible by 5 result = "buzz "; // if so, return buzz return result; } else return i; // if all the above conditions fail, then return the number as it is } alert(series); 



Answer 19:

如果有人正在寻找其他的解决方案:这是一个被任选自定义参数值的纯净递归 ,和可重复使用的功能:

 const fizzBuzz = (from = 1, till = 100, ruleMap = { 3: "Fizz", 5: "Buzz", }) => from > till || console.log( Object.keys(ruleMap) .filter(number => from % number === 0) .map(number => ruleMap[number]).join("") || from ) || fizzBuzz(from + 1, till, ruleMap); // Usage: fizzBuzz(/*Default values*/); 

  • from > till就是要打破递归的锚。 由于它返回false,直至from高于till ,它进入下一条语句( console.log ):
  • Object.keys返回给定对象属性的阵列ruleMap其是35通过默认在我们的例子。
    • 然后,通过数字迭代并返回只有那些由整除from (0作为休息)。
    • 然后,通过过滤数迭代并输出根据该规则的说法。
    • 然而,如果该filter方法返回一个空数组( []没有找到结果)时,它输出仅仅是当前from值,因为join在结束方法最终返回只是一个空字符串( "" ),其是falsy值 。
  • 由于console.log总是返回undefined ,它关系到下一条语句,并调用本身又增加了from按值1


Answer 20:

这就是我怎么做的:

不是最好的代码,但该诀窍

 var numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]; for(var i = 0 ; i <= 19 ; i++){ var fizz = numbers[i] % 3 === 0; var buzz = numbers[i] % 5 === 0; var fizzBuzz = numbers[i] % 5 === 0 && numbers[i] % 3 === 0; if(fizzBuzz){ console.log("FizzBuzz"); } else if(fizz){ console.log("Fizz"); } else if(buzz){ console.log("Buzz"); } else { console.log(numbers[i]); } } 



Answer 21:

FizzBu​​zz的功能版本

const dot = (a,b) => x => a(b(x));
const id = x => x;


function fizzbuzz(n){
  const f = (N, m) => n % N ? id : x => _ => m + x('');
  return dot(f(3, 'fizz'), f(5, 'buzz')) (id) (n);
}

参考: FizzBu​​zz在Haskell由马切伊皮罗克嵌入一个域特定语言



Answer 22:

不同功能的风格 - 天真

fbRule = function(x,y,f,b,z){return function(z){return (z % (x*y) == 0 ? f+b: (z % x == 0 ? f : (z % y == 0  ? b: z)))  }}

range = function(n){return Array.apply(null, Array(n)).map(function (_, i) {return i+1;});}

range(100).map(fbRule(3,5, "fizz", "buzz"))

或者,掺入的结构如在上面的例子:即[[3, “嘶嘶声”],[5, “嗡嗡”],...]

fbRule = function(fbArr,z){
  return function(z){
    var ed = fbArr.reduce(function(sum, unit){return z%unit[0] === 0 ? sum.concat(unit[1]) : sum }, [] )
    return ed.length>0 ? ed.join("") : z
  }
} 

range = function(n){return Array.apply(null, Array(n)).map(function (_, i) {return i+1;});}

range(100).map(fbRule([[3, "fizz"],[5, "buzz"]]))

或者,使用ramda [从https://codereview.stackexchange.com/questions/108449/fizzbuzz-in-javascript-using-ramda ]

var divisibleBy = R.curry(R.compose(R.equals(0), R.flip(R.modulo)))
var fizzbuzz =  R.map(R.cond([
  [R.both(divisibleBy(3), divisibleBy(5)), R.always('FizzBuzz')],
  [divisibleBy(3), R.aklways('Fizz')],
  [divisibleBy(5), R.always('Buzz')],
  [R.T, R.identity]
]));

console.log(fizzbuzz(R.range(1,101)))


文章来源: FizzBuzz program (details given) in Javascript