一、方法概述
Object.fromEntries()是JavaScript中用于將鍵值對數(shù)組轉(zhuǎn)換為對象的靜態(tài)方法。其語法為:
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' }
- 表單數(shù)據(jù)處理
const formData = Object.fromEntries(new URLSearchParams('name=Alice&age=25'));
// 輸出: {name: "Alice", age: "25"}
- 數(shù)組去重統(tǒng)計
const counts = Object.fromEntries( dataArray.map(item => [item, (counts[item] || 0) + 1]) );
- Map結(jié)構(gòu)轉(zhuǎn)換
const map = new Map([['key1', 'value1'], ['key2', 'value2']]); const obj = Object.fromEntries(map);
Object.fromEntries() 是 JavaScript 中用于將鍵值對列表(如數(shù)組、Map)轉(zhuǎn)換為對象的實用方法,常見用途如下:
一、數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換
Map/數(shù)組轉(zhuǎn)對象
將 Map 或二維數(shù)組快速轉(zhuǎn)換為普通對象,語法簡潔:
const map = new Map([['name', 'Alice'], ['age', 30]]);
const obj = Object.fromEntries(map); // { name: "Alice", age: 30 }
二維數(shù)組同理:
const arr = [['id', 101], ['status', true]];
Object.fromEntries(arr); // { id: 101, status: true }
URL 查詢參數(shù)解析
結(jié)合 URLSearchParams 解析查詢字符串為對象:
const params = new URLSearchParams('name=John&age=25');
const queryObj = Object.fromEntries(params); // { name: "John", age: "25" }
? 注意:重復(fù)鍵時,后出現(xiàn)的值會覆蓋前值(如 ?a=1&a=2 輸出 {a: "2"})。
二、數(shù)據(jù)加工處理
對象屬性批量修改
結(jié)合 Object.entries() 實現(xiàn)鏈?zhǔn)讲僮鳎?/p>
const user = { x: 10, y: 20 };
// 所有值乘以2
const updated = Object.fromEntries(
Object.entries(user).map(([key, val]) => [key, val * 2])
); // { x: 20, y: 40 }
過濾或重構(gòu)屬性
提取特定字段或轉(zhuǎn)換數(shù)據(jù)類型:
const data = { name: "Alice", age: "30", temp: "ignore" };
// 僅保留 age 并轉(zhuǎn)為數(shù)字
const cleaned = Object.fromEntries(
Object.entries(data)
.filter(([key]) => key === 'age')
.map(([k, v]) => [k, Number(v)])
); // { age: 30 }
鍵值交換
快速反轉(zhuǎn)對象的鍵與值:
const obj = { a: 1, b: 2 };
const swapped = Object.fromEntries(
Object.entries(obj).map(([k, v]) => [v, k])
); // { 1: "a", 2: "b" }
三、與 Map 結(jié)構(gòu)協(xié)作
Map 轉(zhuǎn)普通對象存儲/傳輸
需要將 Map 數(shù)據(jù)轉(zhuǎn)為 JSON 或發(fā)送給 API 時:
const configMap = new Map([['theme', 'dark'], ['notifications', true]]);
const configObj = Object.fromEntries(configMap);
JSON.stringify(configObj); // '{"theme":"dark","notifications":true}'
核心總結(jié)
核心能力:將鍵值對集合(數(shù)組、Map、URLSearchParams)轉(zhuǎn)為對象。
逆操作:與 Object.entries() 互為逆操作,適合鏈?zhǔn)綌?shù)據(jù)處理。
注意事項:
重復(fù)鍵時,后值覆蓋前值;
符號(Symbol)鍵也可轉(zhuǎn)換。
通過上述場景可見,Object.fromEntries() 在數(shù)據(jù)轉(zhuǎn)換、接口處理和對象重構(gòu)中極大提升了代碼效率。