array.from 可将类数组或可迭代对象转为数组并同步映射转换,支持索引与上下文访问,语法简洁高效,适用于 dom 操作、类型转换及数组生成等场景。

Array.from 不仅能将类数组或可迭代对象转为数组,还能在创建新数组的同时完成元素映射与转换,无需额外调用 map()。
利用第二个参数传入映射函数
Array.from 的第二个参数是一个映射函数,接收当前元素、索引和原对象,返回新数组对应位置的值。它会在生成新数组时直接对每个元素做处理。
- 语法简洁:一步到位,避免
Array.from(...).map(...)的两次遍历 - 支持访问索引和原始上下文,比单纯 map 更灵活
- 注意:该函数不改变原对象,始终返回全新数组
转换类数组并同步处理内容
常见于 DOM 操作,比如把 NodeList 转为数组并提取文本或属性:
-
Array.from(document.querySelectorAll('li'), el => el.textContent.trim())—— 获取所有 li 的干净文本 -
Array.from(document.forms, form => ({ name: form.name, length: form.length }))—— 提取表单元数据 - 比
[...document.querySelectorAll('li')].map(...)更语义清晰,且兼容性更好(IE 不支持展开运算符)
配合 Array-like 对象做类型/结构转换
字符串、arguments、Set 等都可作为第一个参数,结合映射函数实现结构重塑:
-
Array.from('123', Number)→[1, 2, 3](字符串转数字数组) -
Array.from(new Set([1, 2, 2, 3]), x => x * 2)→[2, 4, 6](去重+变换) -
Array.from({length: 5}, (_, i) => i ** 2)→[0, 1, 4, 9, 16](生成带计算逻辑的数组)
注意事项与边界情况
映射函数中若返回 undefined,对应位置仍为 undefined;若需过滤,应先用 filter 或在映射中返回有效值。
- 空值处理:
Array.from([1, , 3], x => x * 2)中的空位会传undefined给映射函数 - 稀疏数组:原对象含空位时,映射函数仍会被调用(参数为
undefined),不会跳过 - 性能友好:内部只遍历一次,适合大数据量的轻量级转换场景
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











