如何使用 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()` 构造函数方法是最佳选择;否则,其他方法也可以正常工作。

更新于:2023年3月2日

浏览量 297

启动您的 职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.