FizzBuzz问题:如何返回0到max区间符合整除规则的数值数组?
现有代码存在的问题
- 除数匹配错误:需求要求判断是否被3或5整除,你的代码中误写为7,完全不符合需求规则
return语句位置错误:你将return写在了for循环内部,循环仅执行一次就会直接返回数组,无法遍历完0到max-1的所有数值- 拼接数组的方式可以优化:用
concat拼接单个元素效率更低,直接用push方法往数组末尾追加元素更合适
修正后的完整代码
function fizzBuzz(max) { let arr = []; for(let i = 0; i < max; i++){ // 满足被3或5整除,但不同时被两者整除 const divisibleBy3 = i % 3 === 0; const divisibleBy5 = i % 5 === 0; if((divisibleBy3 || divisibleBy5) && !(divisibleBy3 && divisibleBy5)){ arr.push(i); } } // 循环结束后再返回数组 return arr; } // 测试调用 console.log(fizzBuzz(20)); // 输出 [3,5,6,9,10,12,18]
代码说明
- 先定义两个变量存储当前数值是否被3、5整除,避免重复计算取模逻辑
- 组合条件同时满足两个要求:① 至少被3或5其中一个整除 ② 不同时被两者整除
- 将return移到for循环外部,等所有数值遍历完成后再返回最终的结果数组
- 0会同时被3和5整除,会自动被条件排除,不需要额外做特殊处理
内容的提问来源于stack exchange,提问作者caseyle
相关产品推荐
相关产品推荐

