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

JavaScript实现FizzBuzz存入数组功能异常求助

你的FizzBuzz代码问题分析与修正

核心问题分析

  • 数组索引错位:for (num of nums)遍历的是数组元素(1~100),但数组索引从0开始,nums[num]相当于用元素值当索引——比如元素1对应数组索引0,你却访问nums[1](实际是元素2);元素100时访问nums[100]直接越界(数组最大索引是99)。
  • 条件顺序错误:先判断被5整除的情况,会导致同时被3和5整除的数(如15)被错误标记为Buzz,永远触发不到FizzBuzz的判断。
  • 循环中修改数组引发连锁错误:当你把数组元素改成字符串(如Fizz)后,后续循环会遍历到这个字符串,用它当索引访问数组会得到undefined,进而触发NaN等异常。

修正后的代码

方案一:初始化数组时直接处理(更高效)

let nums = [];

for (let i = 1; i <= 100; i++) {
    let value;
    // 先判断同时被3和5整除的情况
    if (i % 3 === 0 && i % 5 === 0) {
        value = "FizzBuzz";
    } else if (i % 3 === 0) {
        value = "Fizz";
    } else if (i % 5 === 0) {
        value = "Buzz";
    } else {
        value = i;
    }
    nums.push(value);
    console.log(value);
}

方案二:基于索引遍历数组(保留原初始化逻辑)

let nums = [];

for (let i = 1; i <= 100; i++) {
    nums.push(i);
}

// 用索引遍历,避免拿到修改后的字符串元素
for (let index = 0; index < nums.length; index++) {
    const num = nums[index];
    let value;
    if (num % 3 === 0 && num % 5 === 0) {
        value = "FizzBuzz";
    } else if (num % 3 === 0) {
        value = "Fizz";
    } else if (num % 5 === 0) {
        value = "Buzz";
    } else {
        value = num;
    }
    nums[index] = value;
    console.log(value);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:40:58