解决被挑战的Fizzbuzz叫什么方式?

时间:2018-06-26 21:09:02

标签: javascript arrays for-loop fizzbuzz

我是编程的新手,我目前正在进行FizzBu​​zz测试,一开始看起来很简单,但是我们对执行它有一些要求:

  • 我只能使用一个if。没有多个分支,三元 运算符或else
  • 单元测试。

我通过使用switch语句实现了这一目标,但是在互联网上,我发现这种方法虽然更短,但是目前尚不清楚解决FizzBu​​zz挑战的过程是怎样的。

这是代码:

var i, values = [, , 'fizz', , 'buzz', 'fizz', , , 'fizz', 'buzz', , 'fizz', , , 'fizzbuzz'];
for (i = 0; i < 100; console.log(values[i++ % 15] || i));

如果有人能理解解决FizzBu​​zz挑战的这种方式,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

它称为“查找表”。响应模式每15个数字在所有可能性之间循环一次,因为那是rollback-only3的最小公倍数。因此,我们计算模数15,并将其用作所有15种可能性的数组的索引。

数组中的空白元素用于打印数字本身,而不是15fizz。保留数组元素大致等效于将buzz指定为值,因此这只是一种较短的编写方式

undefined

由于values = [undefined, undefined, 'fizz', undefined, 'buzz', 'fizz', undefined, undefined, 'fizz', 'buzz', undefined, 'fizz', undefined, undefined, 'fizzbuzz']; 为假,因此只要数组元素中未使用其中一个字符串填充,undefined就会为values[i++ % 15] || i