迅速了解一下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)
也可以通過(guò) 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 之外的類(lèi)型會(huì)被強(qiáng)制轉(zhuǎn)為字符串:
他可以接收任何類(lèi)數(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)用:過(guò)濾屬性
定義一個(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ù)庫(kù)表中,那么只需要如下方法過(guò)濾數(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ù)過(guò)濾完畢后就可以很輕松的粘貼到 Excel 表格或方便的存儲(chǔ)到數(shù)據(jù)庫(kù)中
應(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' }))
還有其他通過(guò)使用數(shù)組方法來(lái)實(shí)現(xiàn)的各種功能,這里就不一一展示了
應(yīng)用:將 url 查詢(xún)字符串轉(zhuǎn)為對(duì)象
query = Object.fromEntries(new URLSearchParams('foo=bar&baz=qux')) // {foo: "bar", baz: "qux"}
測(cè)試環(huán)境
想要嘗試的童鞋,需要下載 chrome 測(cè)試版,保證 chrome 瀏覽器版本要大于 73:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
transport.js和jquery沖突問(wèn)題的解決方法
這篇文章主要介紹了transport.js和jquery沖突問(wèn)題的解決方法,需要的朋友可以參考下2015-02-02解決layer.msg 不居中 ifram中的問(wèn)題
今天小編就為大家分享一篇解決layer.msg 不居中 ifram中的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09js獲取UserControl內(nèi)容為拼html時(shí)提供方便
js獲取UserControl內(nèi)容時(shí)無(wú)法測(cè)試通過(guò),原來(lái)是繼承了Page 然后使用VerifyRenderingInServerForm驗(yàn)證2014-11-11JavaScript 操作table,可以新增行和列并且隔一行換背景色代碼分享
這篇文章介紹了JavaScript操作table,可以新增行和列并且隔一行換背景色代碼,有需要的朋友可以參考一下2013-07-07WebGame《逆轉(zhuǎn)裁判》完整版 代碼下載(1月24日更新)
WebGame《逆轉(zhuǎn)裁判》完整版 代碼下載(1月24日更新)...2007-01-01JavaScript實(shí)現(xiàn)表格點(diǎn)擊排序的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)表格點(diǎn)擊排序的方法,可實(shí)現(xiàn)點(diǎn)擊頂部數(shù)據(jù)項(xiàng)標(biāo)題實(shí)現(xiàn)對(duì)應(yīng)數(shù)據(jù)列的排序效果,涉及javascript鼠標(biāo)事件及數(shù)據(jù)排序的技巧,需要的朋友可以參考下2015-05-05微信小程序云開(kāi)發(fā)使用方法新手初體驗(yàn)
微信小程序云開(kāi)發(fā)使用方法新手初體驗(yàn),開(kāi)發(fā)者可以使用云開(kāi)發(fā)開(kāi)發(fā)微信小程序、小游戲,無(wú)需搭建服務(wù)器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05