请求帮助完成FizzBuzz算法第一步:生成递增数值数组
实现从0到n的数组生成(FizzBuzz第一步)
给你几种能正确生成目标数组的实现方式,顺便纠正你之前可能踩的坑:
1. 正确的for循环写法
这是最直观的方式,注意循环条件要包含n本身:
function fizzBuzz(n) { const result = []; // 从0开始,循环到n(包含n),所以用i <= n for (let i = 0; i <= n; i++) { result.push(i); } return result; }
你之前用for循环失败,大概率是循环条件写成了i < n,这样只会生成到n-1,漏掉了n。
2. 用Array.from简洁实现
利用Array.from的映射功能,一行代码搞定:
function fizzBuzz(n) { // 第一个参数指定数组长度为n+1(0到n共n+1个元素),第二个参数返回索引值 return Array.from({ length: n + 1 }, (_, index) => index); }
3. fill结合map的写法
如果你想用fill方法,需要配合map来替换初始值:
function fizzBuzz(n) { // 先创建长度为n+1的数组,用0填充,再通过map把每个位置换成对应的索引 return new Array(n + 1).fill(0).map((_, i) => i); }
之前用fill失败应该是只做了填充,没通过map替换成正确的数值。
4. forEach的正确用法
forEach本身不能直接生成数组,需要先创建空数组再填充:
function fizzBuzz(n) { const result = []; new Array(n + 1).fill(0).forEach((_, i) => { result.push(i); }); return result; }
不过这种写法没必要,不如前面几种简洁。
内容的提问来源于stack exchange,提问作者André Silveira
相关产品推荐
相关产品推荐

