一、方法概述
Object.fromEntries()是JavaScript中用于将键值对数组转换为对象的静态方法。其语法为:
Object.fromEntries(entries);
其中entries必须是由[key, value]形式元素组成的可迭代对象。
const entries = [
['name', 'Alice'],
['age', 25],
['city', 'New York']
];
const obj = Object.fromEntries(entries);
console.log(obj);
// 输出: { name: 'Alice', age: 25, city: 'New York' }
- 表单数据处理
const formData = Object.fromEntries(new URLSearchParams('name=Alice&age=25'));
// 输出: {name: "Alice", age: "25"}
- 数组去重统计
const counts = Object.fromEntries( dataArray.map(item => [item, (counts[item] || 0) + 1]) );
- Map结构转换
const map = new Map([['key1', 'value1'], ['key2', 'value2']]); const obj = Object.fromEntries(map);
Object.fromEntries() 是 JavaScript 中用于将键值对列表(如数组、Map)转换为对象的实用方法,常见用途如下:
一、数据结构转换
Map/数组转对象
将 Map 或二维数组快速转换为普通对象,语法简洁:
const map = new Map([['name', 'Alice'], ['age', 30]]);
const obj = Object.fromEntries(map); // { name: "Alice", age: 30 }
二维数组同理:
const arr = [['id', 101], ['status', true]];
Object.fromEntries(arr); // { id: 101, status: true }
URL 查询参数解析
结合 URLSearchParams 解析查询字符串为对象:
const params = new URLSearchParams('name=John&age=25');
const queryObj = Object.fromEntries(params); // { name: "John", age: "25" }
️ 注意:重复键时,后出现的值会覆盖前值(如 ?a=1&a=2 输出 {a: "2"})。
二、数据加工处理
对象属性批量修改
结合 Object.entries() 实现链式操作:
const user = { x: 10, y: 20 };
// 所有值乘以2
const updated = Object.fromEntries(
Object.entries(user).map(([key, val]) => [key, val * 2])
); // { x: 20, y: 40 }
过滤或重构属性
提取特定字段或转换数据类型:
const data = { name: "Alice", age: "30", temp: "ignore" };
// 仅保留 age 并转为数字
const cleaned = Object.fromEntries(
Object.entries(data)
.filter(([key]) => key === 'age')
.map(([k, v]) => [k, Number(v)])
); // { age: 30 }
键值交换
快速反转对象的键与值:
const obj = { a: 1, b: 2 };
const swapped = Object.fromEntries(
Object.entries(obj).map(([k, v]) => [v, k])
); // { 1: "a", 2: "b" }
三、与 Map 结构协作
Map 转普通对象存储/传输
需要将 Map 数据转为 JSON 或发送给 API 时:
const configMap = new Map([['theme', 'dark'], ['notifications', true]]);
const configObj = Object.fromEntries(configMap);
JSON.stringify(configObj); // '{"theme":"dark","notifications":true}'
核心总结
核心能力:将键值对集合(数组、Map、URLSearchParams)转为对象。
逆操作:与 Object.entries() 互为逆操作,适合链式数据处理。
注意事项:
重复键时,后值覆盖前值;
符号(Symbol)键也可转换。
通过上述场景可见,Object.fromEntries() 在数据转换、接口处理和对象重构中极大提升了代码效率。