我是编程的新手,我目前正在进行FizzBuzz测试,一开始看起来很简单,但是我们对执行它有一些要求:
if
。没有多个分支,三元
运算符或else
。我通过使用switch语句实现了这一目标,但是在互联网上,我发现这种方法虽然更短,但是目前尚不清楚解决FizzBuzz挑战的过程是怎样的。
这是代码:
var i, values = [, , 'fizz', , 'buzz', 'fizz', , , 'fizz', 'buzz', , 'fizz', , , 'fizzbuzz'];
for (i = 0; i < 100; console.log(values[i++ % 15] || i));
如果有人能理解解决FizzBuzz挑战的这种方式,我将不胜感激。
答案 0 :(得分:0)
它称为“查找表”。响应模式每15个数字在所有可能性之间循环一次,因为那是rollback-only
和3
的最小公倍数。因此,我们计算模数15,并将其用作所有15种可能性的数组的索引。
数组中的空白元素用于打印数字本身,而不是15
或fizz
。保留数组元素大致等效于将buzz
指定为值,因此这只是一种较短的编写方式
undefined
由于values = [undefined, undefined, 'fizz', undefined, 'buzz', 'fizz', undefined, undefined, 'fizz', 'buzz', undefined, 'fizz', undefined, undefined, 'fizzbuzz'];
为假,因此只要数组元素中未使用其中一个字符串填充,undefined
就会为values[i++ % 15] || i
。