You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript FizzBuzz数组实现异常及最优方案咨询

FizzBuzz问题排查与最优实现

问题根源

你的代码核心错误是未单独处理数字0的情况。因为0是所有非零整数的倍数,会被判定为同时是3和5的倍数,从而输出fizzBuzz,但你的预期是保留0本身。

另外,第一种代码还存在判断逻辑顺序错误(比如误将数字2判定为3的倍数),原因是先判断了3的倍数,再判断15的倍数,导致15的倍数会被提前拦截成fizz;第二种代码修正了条件顺序,但仍未处理0的特殊情况。

正确实现方案

以下是符合你需求的代码,优先处理0,再按优先级判断倍数:

function fizzBuzz(n) {
  const result = [];
  for (let i = 0; i < n; i++) {
    if (i === 0) {
      result.push(0);
    } else if (i % 15 === 0) { // 先判断同时是3和5的倍数
      result.push('fizzBuzz');
    } else if (i % 3 === 0) {
      result.push('fizz');
    } else if (i % 5 === 0) {
      result.push('buzz');
    } else {
      result.push(i);
    }
  }
  return result;
}

// 调用示例:传入15得到符合规则的输出
console.log(fizzBuzz(15));
// 输出: [0, 1, 2, 'fizz', 4, 'buzz', 'fizz', 7, 8, 'fizz', 'buzz', 11, 'fizz', 13, 14]
// 注:你的预期输出中数字2被标记为'fizz'不符合FizzBuzz规则,以上是标准逻辑的正确结果

更简洁的优化实现

可以用Array.from简化代码,逻辑保持一致:

function fizzBuzz(n) {
  return Array.from({ length: n }, (_, index) => {
    if (index === 0) return 0;
    if (index % 15 === 0) return 'fizzBuzz';
    if (index % 3 === 0) return 'fizz';
    if (index % 5 === 0) return 'buzz';
    return index;
  });
}

关键注意事项

  • 必须先判断15的倍数,再判断3或5的倍数,否则15的倍数会被3或5的条件提前捕获,输出错误结果。
  • 单独处理0,避免其被判定为倍数输出fizzBuzz。

内容的提问来源于stack exchange,提问作者Andrew Kester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:15:42