迅速了解一下ES10中Object.fromEntries的用法使用
Object.fromEntries 方法就是 entries 的逆操作,作用是將一個(gè)鍵值對(duì)數(shù)組轉(zhuǎn)化為一個(gè)對(duì)象
同樣的該方法也已經(jīng)成為 ES10 中 stage4 提案:

Object.entries
在介紹 fromEntries 之前,回顧一下 entries 的用法。這個(gè)方法返回的是對(duì)象自身的、可枚舉的屬性組成的數(shù)組:
const obj = { a: '1', b: 2 }
Object.entries(obj)

也可以通過 new Map 構(gòu)造函數(shù)將對(duì)象轉(zhuǎn)為 Map:
new Map(Object.entries(obj))
// Map(2) {"a" => "1", "b" => 2}

Object.fromEntries
fromEntries 方法則剛好相反,將數(shù)組轉(zhuǎn)為對(duì)象:
Object.fromEntries([['a', '1'], ['b', 2]])

當(dāng)然也可以傳入一個(gè) Map 將其轉(zhuǎn)為對(duì)象:
const map = new Map().set('a', 1).set('b', 2)
Object.fromEntries(map)

幾個(gè)注意事項(xiàng)
當(dāng)傳入的參數(shù)中有重復(fù)出現(xiàn)的 key:
傳入給 fromEntries 的參數(shù),如果有重復(fù)的 key 出現(xiàn),后面的會(huì)被采用:
Object.fromEntries([['a', '1'], ['a', '2']])

雖然 entries 不支持 symbol 作為 key,但 fromEntries 卻可以:
Object.fromEntries([[s, 1]])
Object.entries({ s: 1 })
上述代碼效果如下,entreis 接收的對(duì)象中如果有 symbol 作為 key 會(huì)直接被轉(zhuǎn)換為字符串:

key 為字符串或 symbol 之外的類型會(huì)被強(qiáng)制轉(zhuǎn)為字符串:

他可以接收任何類數(shù)組,如 Map 等,甚至是有自定義迭代器的對(duì)象:
obj = {}
obj[Symbol.iterator] = function* () {
yield [1, 11]
yield [2, 22]
yield [3, 33]
}
console.dir(Object.fromEntries(obj))

最后還有只支持創(chuàng)建對(duì)象可遍歷的屬性
應(yīng)用:過濾屬性
定義一個(gè)函數(shù),這個(gè)函數(shù)第一個(gè)參數(shù)為對(duì)象,另外接收其他幾個(gè)參數(shù)作為需要保留的屬性
function foo(obj, ...keys) {
return Object.fromEntries(Object.entries(obj)
.filter(([key]) => keys.includes(key))
)
}
console.table(foo({ name: 'oli', age: '12' }, 'name'))

應(yīng)用:處理表單
假設(shè)我們有這樣一組數(shù)據(jù):
[{
name: 'oli',
age: 12
}, {
name: 'troy',
age: 14
}]
如果需要將其填充到 csv、sql 數(shù)據(jù)庫表中,那么只需要如下方法過濾數(shù)據(jù):
arr = [{
name: 'oli',
age: 12
}, {
name: 'troy',
age: 14
}]
obj = Object.fromEntries(
arr.map(({name, age}) => [name, age])
)
console.table(obj)

數(shù)據(jù)過濾完畢后就可以很輕松的粘貼到 Excel 表格或方便的存儲(chǔ)到數(shù)據(jù)庫中
應(yīng)用:交換屬性和值
function foo(obj) {
return Object.fromEntries(Object.entries(obj)
.map(([key, value]) => [value, key])
)
}
console.table({ name: 'oli', age: '12' })
console.table(foo({ name: 'oli', age: '12' }))

還有其他通過使用數(shù)組方法來實(shí)現(xiàn)的各種功能,這里就不一一展示了
應(yīng)用:將 url 查詢字符串轉(zhuǎn)為對(duì)象
query = Object.fromEntries(new URLSearchParams('foo=bar&baz=qux'))
// {foo: "bar", baz: "qux"}

測試環(huán)境
想要嘗試的童鞋,需要下載 chrome 測試版,保證 chrome 瀏覽器版本要大于 73:

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
驗(yàn)證控件與Button的OnClientClick事件詳細(xì)解析
以下就是被我已知忽略的問題和解決方案,當(dāng)我發(fā)覺這個(gè)問題的時(shí)候,冒出了一身冷汗,幸虧做了嚴(yán)格的服務(wù)器端驗(yàn)證,不然可就慘了2013-12-12
如何使用工具規(guī)范前端項(xiàng)目的commits與changelog技巧
這篇文章主要為大家介紹了如何使用工具規(guī)范前端項(xiàng)目的commits與changelog技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
基于Bootstrap實(shí)現(xiàn)Material Design風(fēng)格表單插件 附源碼下載
Jquery Material Form Plugin是一款基于Bootstrap的Material Design風(fēng)格的jQuery表單插件。這篇文章主要介紹了基于Bootstrap的Material Design風(fēng)格表單插件附源碼下載,感興趣的朋友參考下2016-04-04
JavaScript實(shí)現(xiàn)單擊下拉框選擇直接跳轉(zhuǎn)頁面的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)單擊下拉框選擇直接跳轉(zhuǎn)頁面的方法,涉及javascript控制頁面跳轉(zhuǎn)的相關(guān)技巧,需要的朋友可以參考下2015-07-07
你可能從未使用過的11+個(gè)JavaScript特性(小結(jié))
這篇文章主要介紹了你可能從未使用過的11+個(gè)JavaScript特性(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
一文詳解如何使npm-scripts更好維護(hù)的配置方法
這篇文章主要為大家介紹了如何使npm-scripts更好維護(hù)的配置方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06

