生成长度为 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()会生成从0到9的键迭代器,展开后是密集数组。
✅ 方法 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,它明确表达了“创建一个指定长度并填充”的意图,且结果一定是密集数组,避免稀疏数组陷阱。