array.from 不直接构建键值对数组,但可通过其映射函数灵活生成:支持从 object.entries、map.entries、类数组(如 {length:n})、字符串、set 等可迭代对象转换,并允许自定义 key/value 结构。

Array.from 本身不直接构建键值对映射数组(如 [{key: 'a', value: 1}, {key: 'b', value: 2}]),但它可以配合其他逻辑灵活生成这类结构,关键在于善用其第二个参数——映射函数(mapFn)和第三个参数——thisArg(可选)。
从对象或类数组生成键值对数组
常见需求是从一个对象的键值、或类似 Map 的结构中提取键值对。此时可先获取键或键值对迭代器,再用 Array.from 转为数组:
- 从普通对象:用
Object.entries(obj)得到[['k1','v1'], ['k2','v2']],再用Array.from映射为对象形式:
const pairs = Array.from(Object.entries(obj), ([k, v]) => ({ key: k, value: v }));
// → [{ key: 'a', value: 1 }, { key: 'b', value: 2 }]
- 从
Map实例:map.entries()返回迭代器,同样适用:
const pairs = Array.from(map.entries(), ([k, v]) => ({ key: k, value: v }));
从数字索引范围生成带键值的数组
若需按序号生成键值对(例如生成选项列表:key 为 ID,value 为描述),可用 Array.from({ length: n }) 创建空数组骨架,再在映射函数中构造对象:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
{ length: 3 }生成类数组,Array.from可对其索引进行映射 - 映射函数接收两个参数:
_, index(第一个参数是当前元素,此处为空,常用_忽略;第二个是索引)
key: `item-${i + 1}`,
value: `Option ${i + 1}`
}));
// → [{ key: 'item-1', value: 'Option 1' }, ...]
从字符串或 Set 等可迭代对象构造
任何实现了 Symbol.iterator 的对象都可作为 Array.from 的输入源:
- 字符串每个字符可视为“键”,索引为隐含位置,也可自定义键名
- Set 去重后生成键值对,例如将元素同时作为
key和value
const chars = Array.from(str, (char, i) => ({ key: i, value: char }));
// → [{ key: 0, value: 'a' }, { key: 1, value: 'b' }]
const set = new Set(['apple', 'banana']);
const fruits = Array.from(set, item => ({ key: item, value: item }));
注意映射函数的执行时机与作用域
映射函数在每个元素上独立调用,不会改变原数据源;若需访问外部变量或绑定上下文,可通过箭头函数捕获,或传入 thisArg:
- 避免在映射函数中修改外部状态,保持纯函数特性更易维护
- 若映射逻辑复杂,建议先封装成独立函数,再传入
Array.from
const data = ['a', 'b'];
const result = Array.from(data, item => ({
key: prefix + item,
value: item.toUpperCase()
}));
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










