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

如何用ES6实现从指定数字倒序计数至0的数组生成?

如何用ES6实现从指定数字倒序计数到0的数组?

你之前用for循环实现倒序计数数组完全没问题,但用ES6写法时踩了个小坑——生成的数组少了0对吧?咱们先看看你原来的ES6代码为啥会缺0:

你写的这段代码:

const values = [...Array(5)].map((_,i) => i+1); 
console.log(values); // 输出 [1,2,3,4,5]
const reverseValues = [...values].reverse(); 
console.log(reverseValues); // 输出 [5, 4, 3, 2, 1]

问题出在Array(5)生成的是长度为5的空数组,map的时候索引i从0到4,加上1后就变成了1到5,反转自然就没0了。

下面给你几种优雅的ES6解决方案:

  • 方案一:调整数组长度+映射计算
    直接让数组长度为startNum + 1,这样就能覆盖到0,再通过映射计算得到倒序序列:
const countDown = (startNum) => [...Array(startNum + 1)].map((_, i) => startNum - i);
console.log(countDown(5)); // 预期输出: [5, 4, 3, 2, 1, 0]

原理:Array(startNum + 1)生成包含startNum+1个元素的数组(比如startNum=5时是6个),map中startNum - i会把索引0到5转换成5到0。

  • 方案二:用Array.from简化写法
    Array.from可以直接接收长度参数和映射函数,代码更直观:
const countDown = (startNum) => Array.from({ length: startNum + 1 }, (_, i) => startNum - i);
console.log(countDown(5)); // 预期输出: [5, 4, 3, 2, 1, 0]
  • 方案三:先生成正序数组再反转
    先拿到0到startNum的正序数组,再反转得到结果,逻辑非常清晰:
const countDown = (startNum) => [...Array(startNum + 1).keys()].reverse();
console.log(countDown(5)); // 预期输出: [5, 4, 3, 2, 1, 0]

原理:Array(startNum +1).keys()会返回一个包含0到startNum的迭代器,扩展成数组后反转就得到倒序序列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:02:47