【问题标题】:What is this way of resolving the Fizzbuzz challenged called?这种解决 Fizzbuzz 挑战的方法叫什么?
【发布时间】:2018-06-26 21:09:01
【问题描述】:

我是编程新手,目前正在做 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 挑战的方法,我将不胜感激。

【问题讨论】:

  • 我认为它没有特定的名称。它们索引到一个稀疏数组,使用模数每 15 个数字重复相同的模式。
  • FizzBu​​zz 序列每 15 个元素重复一次。模运算符% 利用了这一点。空数组元素在数组中变为undefined,这是错误的,因此i 的值可以用作后备。

标签: javascript arrays for-loop fizzbuzz


【解决方案1】:

它被称为“查找表”。响应模式每 15 个数字循环遍历所有可能性,因为这是 315 的最小公倍数。因此,我们计算模数 15,并将其用作包含所有 15 种可能性的数组的索引。

数组中的空白元素用于打印数字本身,而不是fizzbuzz。留下一个数组元素大致相当于将undefined指定为值,所以这只是一种更短的写法

values = [undefined, undefined, 'fizz', undefined, 'buzz', 'fizz', undefined, undefined, 'fizz', 'buzz', undefined, 'fizz', undefined, undefined, 'fizzbuzz'];

由于undefined 是假的,所以只要数组元素没有用其中一个字符串填充,values[i++ % 15] || i 就会是i

【讨论】:

  • 感谢回答,我只是想了解一下这部分,数字之间的,,,是什么意思?
  • 那些是未填充的数组元素。[, , 'fizz'] 类似于[undefined, undefined, 'fizz']
  • 太棒了!现在一切都说得通了!非常感谢。
最近更新 更多