如何使用 JavaScript 将普通对象转换为 ES6 Map?
有多种方法可以将普通 JavaScript 对象转换为 ES6 Map。最简单有效的方法是使用 `Object.entries()` 函数和 `Map()` 构造函数。相比之下,更灵活的替代方法包括 `Object.keys()` 和 `Array.prototype.forEach()` 以及 `for...in` 循环和 `Map()` 函数方法。
ES6 中的 Map 是键值对的集合。在这里,我们可以使用任何类型的对象作为键,包括字符串和数字等原始数据类型。Map 中的值可以是任何类型的对象。
Map 和对象的主要区别在于,在 Map 中,键可以具有任何数据类型,而在对象中,它们始终转换为字符串。
然而,Map 比普通对象有一些优势,例如可迭代性和保证的元素顺序。本文将介绍如何使用 JavaScript 将普通对象转换为 ES6 Map。
方法一:使用 Object.entries() 和 Map()
我们将学习的第一个将普通对象转换为 ES6 Map 的方法包括两个步骤:
使用 `Object.entries()` 方法从对象中获取键值对数组
然后将该数组传递给 `Map()` 构造函数。
示例
`Object.entries()` 方法返回的数组中的每个数组都表示对象中的键值对。以下是如何使用 `Object.entries()` 和 `Map()` 构造函数将普通对象转换为 ES6 Map 的示例:
let plainObject = { "one": 1, "two": 2, "three": 3 };
let map = new Map(Object.entries(plainObject));
console.log(map);
在这个例子中,普通对象使用 `Object.entries()` 函数转换为键值对数组。然后将该数组传递给 `Map()` 函数,该函数创建一个包含这些键值对的新 Map 对象。
`Object.entries()` 方法只需要一行代码,并且大多数现代浏览器都完全支持它。但是,此方法仅限于具有可枚举属性的对象,并且不包括键为符号的属性。
方法二:使用 for...in 循环和 Map() 构造函数
现在让我们来看另一种将普通对象转换为 ES6 Map 的方法。此方法包括以下步骤:
使用 `for...in` 循环迭代对象的属性
使用 `Map.set()` 方法将它们添加到新的 Map 对象中。
示例
以下是如何使用 `for...in` 循环和 `Map()` 构造函数将普通对象转换为 ES6 Map 的示例:
let plainObject = { "one": 1, "two": 2, "three": 3 };
let map = new Map();
for (let key in plainObject) {
map.set(key, plainObject[key]);
}
console.log(map);
在这种方法中,我们正在循环并将属性设置为映射,这可能使此方法不如第一种方法有效。
但是,此方法也适用于具有不可枚举属性的对象以及键为符号的属性。
方法三:使用 Object.keys() 和 Array.prototype.forEach()
在这种方法中,我们遵循以下步骤:
我们首先使用 `Object.keys(obj)` 获取对象键的数组。
然后我们使用 `Array.prototype.forEach()` 方法迭代键
然后我们使用 `Map.set()` 方法将键值对添加到映射中。
示例
let plainObject = { "one": 1, "two": 2, "three": 3 };
let map = new Map();
Object.keys(plainObject).forEach(key => {
map.set(key, plainObject[key]);
});
console.log(map);
需要注意的是,`for...in` 循环、`Object.keys()` 和 `Array.prototype.forEach()` 方法返回的属性顺序与它们在原始对象中定义的顺序不同。属性将按枚举顺序返回。
但是,`Map()` 函数方法按传递的顺序返回键值对。
结论
您可以根据项目的具体要求选择最适合您需求的方法。请记住,如果顺序在您的用例中很重要,则 `Map()` 构造函数方法是最佳选择;否则,其他方法也可以正常工作。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP