ECMAScript 2015,也稱為ES6,是一個花了6年時間完成的主要版本。從那時起,負責ECMAScript標準開發(fā)的技術(shù)委員會39 (TC39)每年都會發(fā)布該標準的新版本。這個年度發(fā)布周期簡化了這個過程,并使新特性快速可用,JavaScript社區(qū)對此表示歡迎。
今年,ECMAScript 2019(簡稱ES2019)將會發(fā)布。 新功能包括Object.fromEntries(),trimStart(),trimEnd(),flat(),flatMap(),symbol對象的description屬性,可選的catch綁定等。
好消息是這些功能已經(jīng)在最新版本的Firefox和Chrome中實現(xiàn),并且它們也可以被轉(zhuǎn)換,以便舊版瀏覽器能夠處理它們。
1. Object.fromEntries()
在JavaScript中,將數(shù)據(jù)從一種格式轉(zhuǎn)換為另一種格式非常常見。 為了便于將對象轉(zhuǎn)換為數(shù)組,ES2017引入了Object.entrie()方法。 此方法將對象作為參數(shù),并以[key,value]的形式返回對象自己的可枚舉字符串鍵控屬性對的數(shù)組。 例如:
const obj = {one: 1, two: 2, three: 3};console.log(Object.entries(obj)); // => [["one", 1], ["two", 2], ["three", 3]]但是如果我們想要做相反的事情并將鍵值對列表轉(zhuǎn)換為對象呢? 某些編程語言(如Python)為此提供了dict()函數(shù)。 在Underscore.js和Lodash中還有_.fromPairs函數(shù)。
ES2019引入Object.fromEntries()方法為JavaScript帶來類似的功能, 此靜態(tài)方法允許你輕松地將鍵值對列表轉(zhuǎn)換為對象:
const myArray = [['one', 1], ['two', 2], ['three', 3]];const obj = Object.fromEntries(myArray);console.log(obj); // => {one: 1, two: 2, three: 3}如你所見,Object.fromEntries()與Object.entries()所做的事情正好相反。 雖然以前可以實現(xiàn)Object.fromEntries()相同的功能,但它實現(xiàn)方式有些復雜:
const myArray = [['one', 1], ['two', 2], ['three', 3]];const Array.from(myArray).reduce((acc, [key, val]) => Object.assign(acc, {[key]: val}), {})console.log(obj); // => {one: 1, two: 2, three: 3}請記住,傳遞給Object.fromEntries()的參數(shù)可以是實現(xiàn)可迭代協(xié)議的任何對象,只要它返回一個兩元素,類似于數(shù)組的對象即可。
例如,在以下代碼中,Object.fromEntries() 將Map對象作為參數(shù),并創(chuàng)建一個新對象,其鍵和對應(yīng)值由Map中的對給出:
const map = new Map();map.set('one', 1);map.set('two', 2);const obj = Object.fromEntries(map);console.log(obj); // => {one: 1, two: 2}Object.fromEntries() 方法對于轉(zhuǎn)換對象也非常有用,思考以下代碼:
const obj = {a: 4, b: 9, c: 16};// 將對象轉(zhuǎn)換為數(shù)組const arr = Object.entries(obj);// 計算數(shù)字的平方根const map = arr.map(([key, val]) => [key, Math.sqrt(val)]);// 將數(shù)組轉(zhuǎn)換回對象const obj2 = Object.fromEntries(map);console.log(obj2); // => {a: 2, b: 3, c: 4}
新聞熱點
疑難解答
圖片精選