在 JavaScript 中,我们操作对象时常常需要将键值对转化为数组或者将数组转化为键值对。ES10 中新增了 Object.fromEntries()
方法,可以很方便地将具有键值对的可迭代对象转化为对象。
用法
Object.fromEntries()
方法接收一个可迭代对象,该对象的每个元素都应该是一个形如 [key, value]
的元素。Object.fromEntries()
方法会返回一个由这些键值对组成的新对象。
const entries = new Map([ ['name', 'Tom'], ['age', 28], ['job', 'developer'] ]); const obj = Object.fromEntries(entries); console.log(obj); // { name: "Tom", age: 28, job: "developer" }
应用场景
1. 对象和 Map 之间的转换
由于 Object.fromEntries()
可以接收任何可迭代对象,所以我们可以使用它来将 Map 转换为对象。
const map = new Map([['name', 'Jack'], ['age', 30]]); const obj = Object.fromEntries(map.entries()); console.log(obj); // { name: "Jack", age: 30 }
反之,如果我们需要将对象转化为 Map,也可以利用 Object.entries()
方法将对象转化为键值对数组,再利用 Map()
方法转换为 Map。
const obj = { name: 'Lucy', age: 25 }; const map = new Map(Object.entries(obj)); console.log(map); // Map { 'name' => 'Lucy', 'age' => 25 }
2. 对象属性拷贝
当我们需要把一个对象的属性复制到另一个对象上时,可以先通过 Object.entries()
将原对象转化为键值对数组,再利用 Object.fromEntries()
将其转化为对象。
const sourceObj = { name: 'Lisa', age: 23 }; const targetObj = { job: 'teacher' }; Object.assign(targetObj, Object.fromEntries(Object.entries(sourceObj))); console.log(targetObj); // { job: "teacher", name: "Lisa", age: 23 }
3. 计算 Map 中的数据
Object.fromEntries()
可以用来从 Map 中计算出一些值,比如计算出 Map 中某些键值对的总和。
const items = new Map([ ['apple', 5], ['banana', 3], ['orange', 2] ]); const sum = Object.fromEntries(items).apple + Object.fromEntries(items).banana; console.log(sum); // 8
总结
Object.fromEntries()
方法可以方便地将具有键值对的可迭代对象转换为对象,同时也可以用来进行对象和 Map 之间的转换、对象属性拷贝和计算 Map 中的数据等操作。掌握了 Object.fromEntries()
的应用场景,我们可以在编写代码时更加灵活地处理对象和键值对相关的操作。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ddf425f6b2d6eab39409ad