Set 和 Map 是 ES6 中新增的数据结构,它们都用于存储一组唯一的值,但在使用和特性上有一些区别。
Set
- 元素的唯一性: Set 中的元素是唯一的,不允许重复。
- 存储任意类型的值: Set 可以存储任意类型的值,包括原始类型和对象引用。
- 迭代顺序: Set 内部元素的顺序是插入顺序,即插入时的顺序决定了元素在 Set 中的顺序。
- 没有键值对: Set 中的元素只有值,没有键,因此不能像 Map 一样通过键来获取值。
- 常见方法: Set 提供了一系列常用的方法,如
add()
、delete()
、has()
、clear()
、size
等。
const mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(3);
mySet.add(1); // 重复元素不会被添加
console.log(mySet); // 输出: Set(3) { 1, 2, 3 }
Map
- 键值对的存储: Map 中的元素是以键值对的形式存储的,每个键对应一个值。
- 键可以是任意类型: Map 的键可以是任意类型的值,包括原始类型和对象引用。
- 迭代顺序: Map 内部元素的顺序是插入顺序,即插入时的顺序决定了元素在 Map 中的顺序。
- 可以通过键获取值: Map 提供了通过键获取对应值的方法
get()
,并且可以通过键来判断值是否存在。 - 常见方法: Map 提供了一系列常用的方法,如
set()
、get()
、delete()
、has()
、clear()
、size
等。
const myMap = new Map();
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');
myMap.set('key3', 'value3');
console.log(myMap.get('key2')); // 输出: value2
综上所述,Set 主要用于存储一组唯一的值,而 Map 则用于存储键值对形式的数据。选择使用哪种数据结构取决于具体的需求,如果只需要存储值而不需要键,则可以使用 Set;如果需要通过键来获取值,则可以使用 Map。