返回

深入浅出探索 Map 遍历及数据结构转换技巧

前端

引言

Map 数据结构在 JavaScript 中扮演着至关重要的角色,它允许我们将键值对存储在一个有序且唯一的集合中。有效地遍历 Map 并将其转换为其他数据结构对于各种编程场景至关重要。本文将深入探究 Map 的遍历方法,并探讨如何将其与其他数据结构进行相互转换。

遍历 Map 的方法

keys() 生成器函数

keys() 生成器函数返回一个包含 Map 中所有键的迭代器。我们可以使用 for...of 循环或扩展运算符 (...) 来遍历这些键。

const myMap = new Map([['a', 1], ['b', 2], ['c', 3]]);

for (const key of myMap.keys()) {
  console.log(key);
}

const keysArray = [...myMap.keys()];
console.log(keysArray);

values() 生成器函数

values() 生成器函数返回一个包含 Map 中所有值的迭代器。与 keys() 方法类似,我们可以使用 for...of 循环或扩展运算符来遍历这些值。

for (const value of myMap.values()) {
  console.log(value);
}

const valuesArray = [...myMap.values()];
console.log(valuesArray);

entries() 生成器函数

entries() 生成器函数返回一个包含所有键值对的迭代器。每个迭代器元素都是一个数组,其中 [0] 索引包含键,[1] 索引包含值。

for (const [key, value] of myMap.entries()) {
  console.log(key, value);
}

const entriesArray = [...myMap.entries()];
console.log(entriesArray);

forEach() 方法

forEach() 方法接受一个回调函数作为参数,该函数针对 Map 中的每个键值对执行。forEach() 方法还接受一个可选的 thisArg 参数,该参数指定 this 在回调函数中的值。

myMap.forEach((value, key) => {
  console.log(key, value);
});

myMap.forEach(function(value, key) {
  console.log(this.name, key, value);
}, { name: 'Custom This' });

Map 到其他数据结构的转换

Map 到 Array

可以使用扩展运算符 (...) 将 Map 转换为数组。扩展运算符将 Map 的键值对转换为一个包含 [key, value] 数组的数组。

const myArray = [...myMap];
console.log(myArray);

Map 到 Object

可以使用 Object.fromEntries() 方法将 Map 转换为对象。该方法接受一个包含键值对数组的迭代器,并将其转换为一个对象。

const myObject = Object.fromEntries(myMap.entries());
console.log(myObject);

其他数据结构到 Map

Array 到 Map

可以使用 Array.from() 方法将数组转换为 Map。Array.from() 方法接受一个包含键值对数组的迭代器,并将其转换为一个 Map。

const myArray = [['a', 1], ['b', 2], ['c', 3]];
const myMap = new Map(myArray);
console.log(myMap);

Object 到 Map

可以使用 Object.entries() 方法将对象转换为 Map。Object.entries() 方法返回一个包含对象键值对数组的数组。我们可以使用 Array.from() 方法将其转换为 Map。

const myObject = { a: 1, b: 2, c: 3 };
const myMap = new Map(Object.entries(myObject));
console.log(myMap);

结语

Map 遍历和转换是 JavaScript 中必不可少的技巧。通过理解 keys()、values()、entries() 和 forEach() 方法,以及如何将 Map 转换为其他数据结构和从其他数据结构转换回来,我们可以高效地处理数据并构建健壮的应用程序。牢记这些技术将使您成为一名更熟练的 JavaScript 开发人员。