object.fromentries 是 es2019 引入的方法,用于将键值对数组或 map 等可迭代对象转换为普通对象,支持 filter、map 等链式操作进行数据筛选与转换,但需注意子数组长度、键类型及重复键等潜在问题。

Object.fromEntries 是 ES2019 引入的方法,专门用于把键值对数组(即每个元素是长度为 2 的可迭代项,如 [key, value])转换成普通对象。
基本用法:传入二维数组
最常见的是传入一个由二元数组组成的数组:
const entries = [['name', 'Alice'], ['age', 30], ['city', 'Beijing']];
const obj = Object.fromEntries(entries);
console.log(obj); // { name: 'Alice', age: 30, city: 'Beijing' }
注意:每个子数组必须恰好有两个元素,第一个是键(会被转为字符串),第二个是值(保持原类型)。
支持 Map 对象直接转换
Map 本身就是可迭代的键值对集合,所以能直接传入:
const map = new Map([['a', 1], ['b', 2], ['c', 3]]);
const obj = Object.fromEntries(map);
console.log(obj); // { a: 1, b: 2, c: 3 }
这比手动遍历 Map 再赋值简洁得多,也避免了 Object.assign 或展开运算符无法处理 Map 的问题。
配合 filter、map 等方法做数据筛选或转换
因为 fromEntries 接收任意可迭代对象,可以和数组方法链式配合,实现“先处理再还原”:
- 过滤掉某些键:
const entries = [['id', 123], ['token', 'abc'], ['email', 'a@b.com']];
const safeObj = Object.fromEntries(
entries.filter(([key]) => key !== 'token')
);
// { id: 123, email: 'a@b.com' }
- 统一修改值(比如转成字符串):
const entries = [['x', 10], ['y', 20]];
const strObj = Object.fromEntries(
entries.map(([k, v]) => [k, String(v)])
);
// { x: '10', y: '20' }
注意事项和常见坑
以下情况会出错或不符合预期:
- 子数组长度 ≠ 2:会取前两个元素,多余忽略,不足则补
undefined; - 键不是有效属性名(如对象、NaN、Symbol):会被自动转为字符串(
Object({})→'[object Object]'); - 重复键:后出现的会覆盖前面的(按数组顺序);
- 传入非可迭代对象(如 null、普通对象)会报
TypeError。
建议使用前确保数据结构规整,必要时加校验:
function safeFromEntries(iterable) {
if (!iterable || typeof iterable[Symbol.iterator] !== 'function') {
throw new TypeError('Expected an iterable');
}
return Object.fromEntries(Array.from(iterable, item => {
if (!Array.isArray(item) || item.length Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











