知了常识站
白蓝主题五 · 清爽阅读
首页  > 软件使用

Array.from使用场景详解

把类数组转成真正的数组

平时写网页时,经常碰到像 document.querySelectorAll 这种方法返回的 NodeList,看起来像数组,能用索引访问,但不能直接调用 mapfilter 这些数组方法。这时候 Array.from 就派上用场了。

const nodeList = document.querySelectorAll('.item');
const array = Array.from(nodeList);
array.map(el => console.log(el));

这样一转,就能放心使用各种数组操作了。

快速生成数字序列

有时候需要生成一个从 0 开始的数字数组,比如做分页组件时要显示 1 到 10 的页码。以前可能得写个 for 循环,现在一行搞定:

const pages = Array.from({ length: 10 }, (_, index) => index + 1);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

这里的第二个参数是个映射函数,相当于在生成的同时做了转换。

复制并处理字符串中的字符

字符串虽然可以遍历,但不是数组。如果想把每个字符变成大写再加个感叹号,可以直接用 Array.from 拆开处理:

const str = 'hello';
const result = Array.from(str, char => char.toUpperCase() + '!');
// ['H!', 'E!', 'L!', 'L!', 'O!']

比起先 split 再 map,这种方式更直观,还能顺便处理一些不可见字符或 emoji 等复杂情况。

处理 Set 和 Map 数据

Set 结构本身是可迭代的,但如果你希望把它转成数组方便后续操作,Array.from 能直接读取迭代器内容:

const uniqueIds = new Set([1, 2, 2, 3]);
const idArray = Array.from(uniqueIds);
// [1, 2, 3]

同样适用于 Map,能把键值对快速转成二维数组。

兼容性好,写法简洁

哪怕在较老的项目里,只要支持 ES6,基本都能用 Array.from。比起展开运算符还要依赖环境是否部署了迭代器接口,它更稳定可靠。尤其是在处理 DOM 返回值这种常见需求时,几乎成了标准写法。