Object.entries 和 Object.fromEntries 是 JavaScript 中用于对象与键值对数组双向转换的互补方法,前者将对象转为二维数组,后者将其还原为对象,常结合 map 在对象数组中批量应用。

Object.entries 和 Object.fromEntries 是 JavaScript 中处理对象键值对的两个互补方法,配合使用可高效实现“对象 ↔ 键值对数组”的双向转换。它们本身不直接处理“对象数组”,但常被用于对对象数组中的每个对象做结构转换,或把多个对象统一转为某种映射结构。
一、Object.entries:把单个对象转成二维数组
它接收一个对象,返回一个由 [key, value] 数组组成的数组,顺序与对象枚举顺序一致(遵循属性定义顺序,包括字符串键和 Symbol 键)。
例如:
const obj = { a: 1, b: 2, c: 3 };console.log(Object.entries(obj));
// → [['a', 1], ['b', 2], ['c', 3]]
二、Object.fromEntries:把二维数组还原为对象
它是 Object.entries 的逆操作,接收一个可迭代对象(如数组),其中每一项是长度为 2 的数组 [key, value],最终生成对应键值对的对象。
例如:
const entries = [['x', 10], ['y', 20]];console.log(Object.fromEntries(entries));
// → { x: 10, y: 20 }
三、在对象数组中批量应用:常见转换场景
对象数组本身是数组,不能直接用 entries 或 fromEntries,但可以结合 map 对每个对象分别处理:
-
把对象数组转为“键值对数组的数组”:对每个对象调用
Object.entries
{ name: 'Alice', age: 30 },
{ name: 'Bob', age: 25 }
];
const entriesArray = users.map(obj => Object.entries(obj));
console.log(entriesArray);
// → [[['name', 'Alice'], ['age', 30]], [['name', 'Bob'], ['age', 25]]]
-
把对象数组转为 Map 映射(如按某字段索引):先提取键值对,再用
fromEntries构建新对象
const nameMap = Object.fromEntries(
users.map(user => [user.name, user])
);
console.log(nameMap);
// → { Alice: { name: 'Alice', age: 30 }, Bob: { name: 'Bob', age: 25 } }
- 筛选并重组对象结构:先 entries,过滤/修改条目,再 fromEntries 还原
const filtered = users.map(user =>
Object.fromEntries(
Object.entries(user)
.filter(([k, v]) => k === 'age' && v > 27)
.map(([k, v]) => [k.toLowerCase(), v])
)
);
// → [{ age: 30 }, {}]
四、注意事项与边界情况
-
Object.entries忽略原型链上的属性,只遍历对象自身的可枚举字符串键 -
Object.fromEntries遇到重复 key 时,后者会覆盖前者(按数组顺序) - 若数组中某项不是长度为 2 的可迭代对象(如
[key]或[key, val, extra]),运行时会报错 - 想处理 Symbol 键?
Object.entries不支持;可用Reflect.ownKeys+getOwnPropertyDescriptor替代










