JavaScript 如何将一个普通对象转换为ES6 Map
在JavaScript中,有很多方法可以将一个普通对象转换为ES6地图。最简单和最有效的方法是使用 Object.entries()函数和Map() 构造函数。相比之下,更灵活的替代方法包括 Object.keys()和Array.prototype.forEach()以及for…in循环和Map()函数方法。
ES6 中的 Map 是一个键值对的集合。这里我们可以使用任何类型的对象作为键,包括像字符串和数字这样的原始数据类型。地图中的值可以是任何类型的对象。
地图和对象的主要区别在于,在地图中,键可以有任何数据类型,而在对象中,它们总是被转换为字符串。
尽管如此,地图比普通对象有一些优势,比如可迭代性和保证元素的顺序。这篇文章将介绍如何使用JavaScript将一个普通的对象转换成ES6地图。
方法1:使用Object.entry()和Map()
我们今天要学习的第一个方法是将普通对象转换为ES6地图,包括两个步骤
- 使用Object. entries()方法从对象中获取一个键值对数组
-
然后将该数组传递给Map()构造函数。
例子
Object. entries()方法返回的数组中的每一个数组都代表对象中的一个键值对。下面是一个例子,说明如何使用Object.entry()和Map()构造函数将一个普通对象变成一个ES6地图。
let plainObject = { "one": 1, "two": 2, "three": 3 };
let map = new Map(Object.entries(plainObject));
console.log(map);
在这个例子中,使用Object. entries()函数将普通对象变成一个键值对数组。然后,该数组被传递给Map()函数,后者用这些键值对生成一个新的Map对象。
Object. entries()方法只需要一行代码,并且被大多数现代浏览器所完全支持。然而,这种方法只限于具有可枚举属性的对象,并且不包括键值为符号的属性。
方法2:使用for…in循环和Map()构造函数
现在让我们看看另一种将普通对象转换为ES6地图的方法。这个方法包括以下步骤
- 使用for…in循环来迭代对象的属性
-
使用Map.set()方法将它们添加到一个新的Map对象中。
例子
下面是一个如何使用for…in循环和Map()构造函数将一个普通对象转换为ES6地图的例子。
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);
在这种方法中,我们是在向地图循环和设置属性,这可能使这个方法的效率低于第一个方法。
然而,这种方法也适用于具有不可枚举属性的对象,以及以Symbols为键的属性。
方法3:使用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()构造函数方法是最好的选择;否则,其他方法也能正常工作。