摘要:方法就是的逆操作,作用是將一個鍵值對數組轉化為一個對象同樣的該方法也已經成為中提案在介紹之前,回顧一下的用法。
Object.fromEntries 方法就是 entries 的逆操作,作用是將一個鍵值對數組轉化為一個對象
同樣的該方法也已經成為 ES10 中 stage4 提案:
Object.entries在介紹 fromEntries 之前,回顧一下 entries 的用法。這個方法返回的是對象自身的、可枚舉的屬性組成的數組:
const obj = { a: "1", b: 2 } Object.entries(obj)
也可以通過 new Map 構造函數將對象轉為 Map:
new Map(Object.entries(obj)) // Map(2)?{"a" => "1", "b" => 2}Object.fromEntries
fromEntries 方法則剛好相反,將數組轉為對象:
Object.fromEntries([["a", "1"], ["b", 2]])
當然也可以傳入一個 Map 將其轉為對象:
const map = new Map().set("a", 1).set("b", 2) Object.fromEntries(map)幾個注意事項
當傳入的參數中有重復出現的 key:
傳入給 fromEntries 的參數,如果有重復的 key 出現,后面的會被采用:
Object.fromEntries([["a", "1"], ["a", "2"]])
雖然 entries 不支持 symbol 作為 key,但 fromEntries 卻可以:
Object.fromEntries([[s, 1]]) Object.entries({ s: 1 })
上述代碼效果如下,entreis 接收的對象中如果有 symbol 作為 key 會直接被轉換為字符串:
key 為字符串或 symbol 之外的類型會被強制轉為字符串:
他可以接收任何類數組,如 Map 等,甚至是有自定義迭代器的對象:
obj = {} obj[Symbol.iterator] = function* () { yield [1, 11] yield [2, 22] yield [3, 33] } console.dir(Object.fromEntries(obj))
最后還有只支持創建對象可遍歷的屬性
應用:過濾屬性定義一個函數,這個函數第一個參數為對象,另外接收其他幾個參數作為需要保留的屬性
function foo(obj, ...keys) { return Object.fromEntries(Object.entries(obj) .filter(([key]) => keys.includes(key)) ) } console.table(foo({ name: "oli", age: "12" }, "name"))應用:處理表單
假設我們有這樣一組數據:
[{ name: "oli", age: 12 }, { name: "troy", age: 14 }]
如果需要將其填充到 csv、sql 數據庫表中,那么只需要如下方法過濾數據:
arr = [{ name: "oli", age: 12 }, { name: "troy", age: 14 }] obj = Object.fromEntries( arr.map(({name, age}) => [name, age]) ) console.table(obj)
數據過濾完畢后就可以很輕松的粘貼到 Excel 表格或方便的存儲到數據庫中
應用:交換屬性和值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" }))
還有其他通過使用數組方法來實現的各種功能,這里就不一一展示了應用:將 url 查詢字符串轉為對象
query = Object.fromEntries(new URLSearchParams("foo=bar&baz=qux")) // {foo: "bar", baz: "qux"}測試環境
想要嘗試的童鞋,需要下載 chrome 測試版,保證 chrome 瀏覽器版本要大于 73:
參考:
https://www.chromestatus.com/...
https://github.com/tc39/propo...
http://2ality.com/2019/01/obj...
更多內容關注:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/102360.html
摘要:可選的語句中的有時候并沒有用,思考下面代碼使用瀏覽器可能尚未實現的功能這里回調函數中已經幫我們處理好的錯誤此代碼中的回調的信息并沒有用處。 為了保證可讀性,本文采用意譯而非直譯。 showImg(https://segmentfault.com/img/bVbucuJ?w=1024&h=682); ECMAScript 2015,也稱為ES6,是一個花了6年時間完成的主要版本。從那時起...
摘要:舉例來說即便某個失敗了,也不會導致的發生,這樣在不在乎是否有項目失敗,只要拿到都結束的信號的場景很有用。對于則稍有不同只要有子項,就會完成,哪怕第一個了,而第二個了,也會,而對于,這種場景會直接。 1. 引言 本周精讀的內容是:Google I/O 19。 2019 年 Google I/O 介紹了一些激動人心的 JS 新特性,這些特性有些已經被主流瀏覽器實現,并支持 polyfill...
showImg(https://user-gold-cdn.xitu.io/2019/5/22/16adcec448a45d82); 1. Object.is() 用來解決在ES5中 兩種相等運算符的缺點。用來比較兩個值是否嚴格相等,行為和(===)基本一致。 在ES5中判斷兩個值是否相等,只能用(==)相等運算符和(===)嚴格相等運算符,但是這兩貨都有缺點,前者 兩邊的值都會轉換數據類型,...
showImg(https://segmentfault.com/img/remote/1460000019258913?w=2933&h=1955); 1. Object.is() 用來解決在ES5中 兩種相等運算符的缺點。用來比較兩個值是否嚴格相等,行為和(===)基本一致。 在ES5中判斷兩個值是否相等,只能用(==)相等運算符和(===)嚴格相等運算符,但是這兩貨都有缺點,前者 兩邊的值都...
摘要:一將語法擴展為超集動機聲稱是一個子集,但是因為已經有詳細記錄這是不正確的,因為字符串可以包含未轉義的和字符,而字符串則不能二對進行了語法更改,允許中不寫捕獲動機此提議引入的語法更改允許省略綁定其周圍的括號原寫法嘗試使用可能無法實現的功能支 showImg(https://segmentfault.com/img/bVbqWmL?w=1600&h=900); 一、JSON superse...
閱讀 3626·2021-11-24 09:39
閱讀 2563·2021-11-15 11:37
閱讀 2220·2021-11-11 16:55
閱讀 5226·2021-10-14 09:43
閱讀 3714·2021-10-08 10:05
閱讀 3016·2021-09-13 10:26
閱讀 2334·2021-09-08 09:35
閱讀 3546·2019-08-30 15:55