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
相关产品推荐
相关产品推荐

