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

JavaScript新手求助:正确实现FizzBuzz数组生成函数

解决你的FizzBuzz函数问题

先说说你代码里的几个关键问题:

  • 初始化output = [1, 2, ];根本不是空数组,而且需求是初始添加1,这里直接塞了1和2,逻辑不对
  • num = num++;是无效自增,num++是先返回当前值再自增,执行后num还是1
  • 条件判断顺序错误:必须先判断同时被3和5整除的情况,不然会被前面的单条件覆盖
  • 每次判断都用num++,导致每次判断的数字都不一样,逻辑完全混乱
  • 用return output.push(...)会直接返回数组长度,且return后函数终止,没法持续添加元素

下面是修正后的代码,提供两种常用版本:

版本1:生成指定长度的FizzBuzz数组

function fizzBuzz(length) {
    const output = [];
    // 从1开始循环到指定长度
    for (let num = 1; num <= length; num++) {
        let item;
        // 先判断优先级最高的双整除条件
        if (num % 3 === 0 && num % 5 === 0) {
            item = "FizzBuzz";
        } else if (num % 3 === 0) {
            item = "Fizz";
        } else if (num % 5 === 0) {
            item = "Buzz";
        } else {
            item = num;
        }
        output.push(item);
    }
    return output;
}

// 示例:生成前15个元素的数组
console.log(fizzBuzz(15));

版本2:支持持续添加元素(每次调用新增一个)

如果要实现“持续添加”的效果,可以用闭包保存状态:

function createFizzBuzz() {
    const output = [1]; // 初始添加1
    let currentNum = 2; // 下一个要判断的数字
    
    return function() {
        let item;
        if (currentNum % 3 === 0 && currentNum % 5 === 0) {
            item = "FizzBuzz";
        } else if (currentNum % 3 === 0) {
            item = "Fizz";
        } else if (currentNum % 5 === 0) {
            item = "Buzz";
        } else {
            item = currentNum;
        }
        output.push(item);
        currentNum++;
        return [...output]; // 返回数组副本,避免外部修改内部状态
    }
}

// 使用方式
const addFizzBuzz = createFizzBuzz();
console.log(addFizzBuzz()); // [1,2]
console.log(addFizzBuzz()); // [1,2,"Fizz"]
console.log(addFizzBuzz()); // [1,2,"Fizz",4]
console.log(addFizzBuzz()); // [1,2,"Fizz",4,"Buzz"]

关键逻辑说明

  • 循环时只用同一个num值做判断,避免多次自增导致数字混乱
  • 先判断双整除条件,确保优先级最高的规则被触发
  • 闭包版本通过保存currentNum和output的状态,实现每次调用添加一个元素的“持续添加”效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 22:50:08