在 ECMAScript 2018(也就是 ES9) 中,JavaScript 给 Object 加入了一个新方法:fromEntries
。这个方法可以将一个键值对数组转换为对象,该对象会包含这些键值对。该方法提供了更方便的方式来创建对象,尤其是针对那些需要一次性从多个源集合读取的数据。
语法
Object.fromEntries(iterable)
iterable
:一个可迭代的对象,比如 Map、Set、Array 等,包含了键值对的数组。
应用示例
使用数组创建对象
// javascriptcn.com 代码示例 const entries = [ ['firstName', 'John'], ['lastName', 'Doe'], ['age', 30] ]; const person = Object.fromEntries(entries); console.log(person); // {firstName: "John", lastName: "Doe", age: 30}
使用 Map 对象创建对象
const map = new Map(); map.set('firstName', 'John'); map.set('lastName', 'Doe'); map.set('age', 30); const person = Object.fromEntries(map); console.log(person); // {firstName: "John", lastName: "Doe", age: 30}
组合多种类型的对象
// javascriptcn.com 代码示例 const a = { name: 'Alice' }; const b = { name: 'Bob' }; const c = { name: 'Charlie' }; const entries = [ ['a', a], ['b', b], ['c', c] ]; const result = Object.fromEntries(entries); console.log(result); // {a: {name: "Alice"}, b: {name: "Bob"}, c: {name: "Charlie"}}
需要注意的是,如果 entries
的值中有相同的键名,则后面的键值会覆盖前面的键值。如下面这个示例:
const entries = [ ['a', 1], ['b', 2], ['a', 3] ]; const result = Object.fromEntries(entries); console.log(result); // {a: 3, b: 2}
注意事项
iterable
必须是一个可迭代的对象。如果传递的对象不是可迭代的对象,则会抛出一个 TypeError。iterable
应该是一个包含键值对的数组,其中每个键值对都是数组的一个元素。如果某个键值对的元素数量不等于 2,则会以该键值对的 index 和 value 属性作为实际的键和值。如果键是一个对象,则 Object.toString() 方法会被调用进行转换。如果
iterable
中的元素中有任意部分丢失,则该方法运行结束并抛出 TypeError 。
总结
Object.fromEntries
提供了一种更方便的方式来创建对象,适用于那些需要从多个源集合快速读取数据的场景。需要注意的是,iterable 必须是包含键值对的数组,每个键值对都是一个数组元素。在实际应用时,我们可以使用这个特性来减少代码量和提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652a78547d4982a6ebccc171