Set
和 Map
都是 ES6(ECMAScript 2015)中引入的两种新的数据结构,它们都属于集合类型,但各自有各自的特点和用法。
相同点:
- 键的唯一性:无论是
Set
还是Map
,它们的键(在Set
中,键和值是一样的)都是唯一的,不会有重复。 - 存储对象引用:
Set
和Map
都是存储对象引用的,而不是存储对象的副本。
不同点:
-
存储的数据结构:
Set
存储的是键值对,但键和值是相同的。因此,Set
成员的值都是唯一的,没有重复的值。Map
存储的是键值对,键和值可以是任何类型(对象或者原始值),且键是唯一的。
-
使用方法:
Set
主要用于检查一个值是否存在于某个集合中,实现并集、交集和差集等运算。Map
主要是用来存储键值对,并且能通过键快速检索到值。
-
迭代顺序:
Set
的迭代顺序就是元素的插入顺序。Map
的迭代顺序是按照元素被插入时的顺序。
下面是一些具体的代码示例:
Set 的使用:
javascriptlet set = new Set();// 添加元素
set.add(1);
set.add(2);
set.add(2); // 这个元素不会被添加,因为 Set 中的元素是唯一的console.log(set.size); // 输出 2
console.log(set.has(2)); // 输出 true// 遍历 Set
for (let value of set) {
console.log(value); // 输出 1 和 2
}
Map 的使用:
javascriptlet map = new Map();// 添加键值对
map.set('key1', 'value1');
map.set('key2', 'value2');
map.set('key2', 'new value2'); // 这个键值对会替换掉原来的键值对console.log(map.size); // 输出 2
console.log(map.has('key2')); // 输出 true
console.log(map.get('key2')); // 输出 'new value2'// 遍历 Map
for (let [key, value] of map.entries()) {
console.log(key, value); // 输出 'key1', 'value1' 和 'key2', 'new value2'
}
在上面的代码中,你可以看到 Set
和 Map
的基本使用方式,包括添加元素、检查元素是否存在、获取元素以及遍历元素等。注意,Map
的遍历可以通过 map.entries()
、map.keys()
和 map.values()
方法分别获取键值对、键和值。