在 ES8 中,新增了一个非常实用的方法:Object.fromEntries()
。这个方法可以将一个二维数组转化为一个对象,这给你极大的便利性,例如将一个 Map 转化为一个对象或 JSON 对象转化为一个对象。
语法
Object.fromEntries(iterable)
其中 iterable 需要必须是一个二维数组。数组中每个元素都是一个 key-value 对象,例如:
[ ['key1', 'value1'], ['key2', 'value2'], ['key3', 'value3'] ]
示例
const entries = [ ['name', 'Tom'], ['age', 20], ['city', 'Shanghai'] ]; const obj = Object.fromEntries(entries); console.log(obj); // { name: 'Tom', age: 20, city: 'Shanghai' }
用途
将 Map 转化为对象
在 JavaScript 中,Map 对象(ES6 新增)也是一种 key-value 映射的数据结构,但是和对象不同的是,Map 对象的 key 可以是任意类型,包括对象和函数。如果我们想把 Map 对象转化为对象,一般的方法是遍历 Map,再一个一个的复制到对象中,而现在我们可以通过 Object.fromEntries()
方法很轻松地实现。
const myMap = new Map(); myMap.set('name', 'Tom'); myMap.set('age', 20); myMap.set('city', 'Shanghai'); const obj = Object.fromEntries(myMap); console.log(obj); // {name: "Tom", age: 20, city: "Shanghai"}
将 JSON 转化为对象
当我们接收到一个 JSON 格式的数据时,我们将它解析为一个对象,一般的方法是使用 JSON.parse()
方法,而这个方法返回的是一个对象。但是如果我们取到的数据是一个数组,我们需要遍历数组,一个一个的解析为对象,或者我们可以用 ES8 标准中的 Object.fromEntries()
方法快速实现。
const jsonString = '[["name", "Tom"], ["age", 20], ["city", "Shanghai"]]'; const jsonObj = JSON.parse(jsonString); const obj = Object.fromEntries(jsonObj); console.log(obj); // {name: "Tom", age: 20, city: "Shanghai"}
兼容性
由于 Object.fromEntries()
是 ES8 中新增的方法,所以在一些旧浏览器中可能不支持。如果你需要兼容旧浏览器,你可以写一个 polyfill 插件使代码兼容旧版本的浏览器。
-- -------------------- ---- ------- -- --------------------- - ------------------ - ----------------- - -- --------- -- -------------------------- - ----- --- --------------------------- ------- -- ---------- ------- ---------- --------- ------ -- - --- -------- - ------ ---------- ----- ---- ----- --- ----- ---------- - ----- ------ - --- --- ------ ----- ------ -- -------- - ----------- - ------ - ------ ------- -- -
总结
Object.fromEntries()
方法是 ES8 新增的方法,非常实用和方便。可以用于将 Map 转化为对象、JSON 对象转化为对象等,但需要注意兼容性问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e703bcf6b2d6eab325aaa5