Skip to content

生成长度为 n 、元素从0开始递增的数组

在 JavaScript 中,生成一个长度为 10、元素从 0 开始递增的数组(即 [0, 1, 2, ..., 9]),有多种实现方式。以下是 常见且实用的方法,按简洁性与可读性排序:


✅ 方法 1:Array.from() + 索引映射(推荐)

javascript
const arr = Array.from({ length: 10 }, (_, i) => i);
console.log(arr); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 优点:语义清晰、一行代码、创建的是密集数组
  • 原理Array.from 接收一个类数组对象(如 {length: 10})和映射函数,i 是当前索引。

✅ 方法 2:扩展运算符 + keys()

javascript
const arr = [...Array(10).keys()];
console.log(arr); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 优点:非常简洁,利用了 Array.prototype.keys() 返回迭代器。
  • 注意Array(10) 创建的是稀疏数组,但 .keys() 会生成从 09 的键迭代器,展开后是密集数组。

✅ 方法 3:Array(10).fill().map()

javascript
const arr = Array(10).fill().map((_, i) => i);
// 或
const arr = Array(10).fill(0).map((_, i) => i);
console.log(arr); // [0, 1, 2, ..., 9]
  • 说明:先用 fill() 将稀疏数组转为密集数组(填入任意值),再通过 map 获取索引。
  • 注意:不能直接 Array(10).map(...),因为稀疏数组的 map 会跳过空位!

✅ 方法 4:传统 for 循环

javascript
const arr = [];
for (let i = 0; i < 10; i++) {
  arr.push(i);
}
console.log(arr); // [0, 1, 2, ..., 9]
  • 优点:兼容性好,逻辑直观。
  • 适用场景:需要兼容非常老的环境(如 IE)。

✅ 方法 5:递归(函数式风格,不推荐用于大数组)

javascript
const range = (n, current = 0) => 
  current < n ? [current, ...range(n, current + 1)] : [];

const arr = range(10);
console.log(arr); // [0, 1, 2, ..., 9]
  • 缺点:调用栈深度限制,性能较差,仅作演示。

❌ 错误方法(常见误区)

javascript
// ❌ 错误!Array(10) 是稀疏数组,map 不会遍历空位
const arr = Array(10).map((_, i) => i);
console.log(arr); // [empty × 10] → 实际全是空槽!

📌 总结推荐

场景推荐方法
现代开发(ES6+)Array.from({ length: 10 }, (_, i) => i)
追求极简[...Array(10).keys()]
需要兼容旧环境for 循环

💡 最佳实践:优先使用 Array.from,它明确表达了“创建一个指定长度并填充”的意图,且结果一定是密集数组,避免稀疏数组陷阱。