在 ECMAScript 2019 中,我们看到了 Object.fromEntries 方法的引入。这个方法以一种简洁的方式将一个键值对的数组转换成一个对象。在 ECMAScript 2021 中,Object.fromEntries 方法被进一步改进,使其更加易于使用和灵活,本文将介绍其使用方法。
什么是 Object.fromEntries 方法?
Object.fromEntries 方法是 ES2019 标准中所引入的方法,它接收一个二维数组作为参数,其中每一个数组的第一个元素作为键,第二个元素作为值,然后将它们组成对象并返回。在 ECMAScript 2021 中,它可以接收一个类似 Map 的数据结构,且可以在生成对象时指定原型、属性描述符等等。
示例代码
下面是一个使用 Object.fromEntries 方法的示例代码:
// www.javascriptcn.com code example
const entries = [
['name', 'Alice'],
['age', 20],
['location', 'New York'],
['hobbies', ['reading', 'singing', 'dancing']],
];
const obj = Object.fromEntries(entries);
console.log(obj); // {name: "Alice", age: 20, location: "New York", hobbies: Array(3)}在以上代码中,我们输入一个包含四个键值对的二维数组,然后将其传入 Object.fromEntries 方法,该方法将二维数组转换为一个对象并返回。这个对象包含所有的键值对,每个键值对由二维数组中的元素组成。
Object.fromEntries 方法的更高级用法
在 ECMAScript 2021 中,Object.fromEntries 方法不仅仅是将一组键值对数组转换成对象,它还可以接受一个 Map 或任何具有 Iterator 接口的对象作为参数,其中的键值对将被用于构造一个新的对象。
除此之外,Object.fromEntries 方法还支持传入第二个可选参数,用于指定新对象的原型以及属性描述符。通过传入该参数,您可以构造具有特定原型和属性描述符的新对象。
这里是一个基于 Map 对象创建对象的示例:
// www.javascriptcn.com code example
const map = new Map([
['name', 'Alice'],
['age', 20],
['location', 'New York'],
['hobbies', ['reading', 'singing', 'dancing']],
]);
const obj = Object.fromEntries(map);
console.log(obj); // {name: "Alice", age: 20, location: "New York", hobbies: Array(3)}在这个示例中,我们创建了一个 Map 对象,并将其传入 Object.fromEntries 方法中,该方法将 Map 转换为一个对象并返回。
下面是一个使用属性描述符的示例:
// www.javascriptcn.com code example
const entries = [
['name', 'Alice'],
['age', 20],
['location', 'New York'],
['hobbies', ['reading', 'singing', 'dancing']],
];
const obj = Object.fromEntries(entries, {
__proto__: { sayName() { console.log(`My name is ${this.name}`) } },
name: { writable: true },
age: { writable: false, value: 21 },
});
console.log(obj); // {name: "Alice", age: 21, location: "New York", hobbies: Array(3)}
obj.sayName(); // "My name is Alice"
obj.age = 30; // Error: Cannot assign to read only property 'age' of object '#<Object>'
obj.name = 'Rachel';
obj.sayName(); // "My name is Rachel"在以上示例中,我们除了输入一个键值对数组外,还传入了一个第二个可选参数。
该参数是一个对象,它包含一个 proto 属性,用于指定新对象的原型,以及若干个具有属性描述符的对象,用于指定新对象中各个属性的描述符。
通过这种方式,我们可以根据需要定制新生成的对象的类型,并且可以详细地控制某些属性的特征。
结语
Object.fromEntries 方法在 ECMAScript 2021 中增强了其功能,使其更加灵活易用。在实际开发中,您可以将其用于将一组键值对数组转换为对象,或者利用其支持传入 Map 对象和属性描述符的特性来生成高度定制化的对象。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/67d7c056a941bf7134de3664