array.from 是 javascript 中用于将类数组或可迭代对象转为数组并支持映射的静态方法,常用于生成指定范围、起始值和步长的数值序列,如 array.from({ length: 10 }, (_, i) => i) 生成 [0,1,...,9],且比其他方法更简洁可控。

Array.from 是 JavaScript 中一个灵活且功能强大的静态方法,它不仅能将类数组对象或可迭代对象转为数组,还能通过传入映射函数,在创建数组的同时生成所需值。构建特定范围的数值序列(比如从 0 到 9、1 到 100、或带步长的序列)正是它的典型用例之一。
利用 Array.from + 类数组长度生成连续整数
Array.from 的第一个参数可以是一个表示长度的对象(如 { length: n }),它会被当作类数组处理;第二个参数是映射函数,接收当前索引作为参数,返回对应元素值。这是生成 0 起始连续整数最简洁的方式:
- 生成 [0, 1, 2, ..., 9]:
Array.from({ length: 10 }, (_, i) => i) - 生成 [1, 2, 3, ..., 10]:
Array.from({ length: 10 }, (_, i) => i + 1) - 生成 [5, 6, 7, ..., 14]:
Array.from({ length: 10 }, (_, i) => i + 5)
支持任意起始值与步长的通用序列生成
只需在映射函数中引入起始值 start 和步长 step,就能构造更通用的序列。例如生成从 2 开始、步长为 3 的 5 个数:
const start = 2; const step = 3; const count = 5;-
Array.from({ length: count }, (_, i) => start + i * step)→[2, 5, 8, 11, 14] - 该模式不依赖循环或手动 push,逻辑清晰且函数式风格明显
注意边界:length 必须是有效非负整数
Array.from 的第一个参数若为对象,其 length 属性会被强制转换为整数。如果传入小数、负数或无法转为数字的值,可能得到空数组或意外结果:
-
Array.from({ length: 3.7 }, (_, i) => i)→[0, 1, 2](3.7 被截断为 3) -
Array.from({ length: -2 }, (_, i) => i)→[](负值转为 0) -
Array.from({ length: 'abc' }, (_, i) => i)→[](NaN 转为 0)
对比其他方法:比 Array.keys() 或扩展运算符更可控
虽然 [...Array(5).keys()] 也能生成 [0,1,2,3,4],但它依赖 keys() 迭代器,且不易直接控制起始/步长;而 Array(5).fill().map((_,i)=>i+1) 需要先 fill 再 map,多一次遍历。Array.from 在单次遍历中完成初始化与映射,语义更明确、性能略优,也更适合封装成可复用的工具函数。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











