Object.fromEntries()

一、方法概述

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' }
  1. 表单数据处理
const formData = Object.fromEntries(new URLSearchParams('name=Alice&age=25')); 
// 输出: {name: "Alice", age: "25"} 
  1. 数组去重统计
const counts = Object.fromEntries(   dataArray.map(item => [item, (counts[item] || 0) + 1]) ); 
  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() 在数据转换、接口处理和对象重构中极大提升了代码效率。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容