如何在 ES2021 中使用 Map 和 Set

在 JavaScript 中,我们经常需要使用一些数据结构来存储和操作数据。ES2021 引入了两个新的数据类型 Map 和 Set,它们可以让我们更方便地操作数据,提高代码的可读性和性能。本文将介绍如何在 ES2021 中使用 Map 和 Set。

Map

Map 是一种键值对的集合,它类似于对象,但它的键可以是任何类型,而不仅仅是字符串。Map 的特点是可以快速地添加、删除和查找元素,而且可以保持元素的顺序。下面是一些常用的方法:

创建 Map

我们可以使用 new Map() 来创建一个空的 Map,也可以在创建时传入一个数组,数组的每个元素都是一个键值对的数组,例如:

const map = new Map([
  ['name', '张三'],
  ['age', 18],
  ['gender', '男']
]);

添加元素

我们可以使用 set() 方法向 Map 中添加元素,例如:

map.set('address', '北京');

删除元素

我们可以使用 delete() 方法删除 Map 中的元素,例如:

map.delete('gender');

查找元素

我们可以使用 get() 方法查找 Map 中的元素,例如:

const age = map.get('age');

遍历 Map

我们可以使用 for...of 循环遍历 Map 中的元素,例如:

for (const [key, value] of map) {
  console.log(`${key}: ${value}`);
}

Map 的大小

我们可以使用 size 属性获取 Map 的大小,例如:

const size = map.size;

Set

Set 是一种无序的、不重复的集合,它类似于数组,但它的元素不能重复。Set 的特点是可以快速地添加、删除和查找元素,而且可以保持元素的顺序。下面是一些常用的方法:

创建 Set

我们可以使用 new Set() 来创建一个空的 Set,也可以在创建时传入一个数组,数组的每个元素都是 Set 中的一个元素,例如:

const set = new Set(['张三', '李四', '王五']);

添加元素

我们可以使用 add() 方法向 Set 中添加元素,例如:

set.add('赵六');

删除元素

我们可以使用 delete() 方法删除 Set 中的元素,例如:

set.delete('王五');

查找元素

我们可以使用 has() 方法查找 Set 中的元素,例如:

const hasLiSi = set.has('李四');

遍历 Set

我们可以使用 for...of 循环遍历 Set 中的元素,例如:

for (const item of set) {
  console.log(item);
}

Set 的大小

我们可以使用 size 属性获取 Set 的大小,例如:

const size = set.size;

示例代码

下面是一个使用 Map 和 Set 的示例代码,它实现了一个简单的计数器,用于统计一段文本中每个单词出现的次数:

function countWords(text) {
  const words = text.split(/\s+/);
  const counts = new Map();
  const uniqueWords = new Set(words);
  for (const word of uniqueWords) {
    let count = 0;
    for (const w of words) {
      if (w === word) {
        count++;
      }
    }
    counts.set(word, count);
  }
  return counts;
}

const text = 'the quick brown fox jumps over the lazy dog';
const counts = countWords(text);
for (const [word, count] of counts) {
  console.log(`${word}: ${count}`);
}

总结

Map 和 Set 是 ES2021 中新增的两个数据类型,它们可以让我们更方便地操作数据,提高代码的可读性和性能。本文介绍了 Map 和 Set 的常用方法和示例代码,希望能对你有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658bd9c7eb4cecbf2d12107d


纠错
反馈