在 JavaScript 中,Map
和 Set
是两个用于存储数据的集合类型,它们在用途和行为上有一些重要的区别和共性。
共同点
-
都保持插入顺序:
Map
和Set
都维护了元素的插入顺序。你可以使用forEach
或for...of
迭代它们时,会按照插入的顺序访问元素。
-
都是 ES6 引入的:
- 两者都是 ECMAScript 6(ES6)引入的新数据结构,提供了更灵活和强大的数据存储和操作功能。
-
支持迭代:
- 两者都支持使用
forEach
、for...of
等方法进行迭代操作。
- 两者都支持使用
-
不允许重复元素:
Set
确保集合中所有的元素都是唯一的。Map
的键(key)必须唯一,但值(value)可以重复。
区别
-
数据结构的目的:
Map
:用于存储键值对(key-value pairs)。每个元素都有一个唯一的键(key)和一个值(value)。Map
的键可以是任何类型(包括对象和函数),并且键值对的顺序是插入顺序。Set
:用于存储唯一的值。集合中的每个元素都是唯一的,不允许重复。Set
只存储值,没有键。
-
主要操作:
-
Map
:- 添加:
map.set(key, value)
- 获取:
map.get(key)
- 删除:
map.delete(key)
- 检查:
map.has(key)
- 遍历:
map.forEach(callback)
或for...of
,可使用map.keys()
,map.values()
,map.entries()
- 添加:
-
Set
:- 添加:
set.add(value)
- 获取:
set.has(value)
- 删除:
set.delete(value)
- 遍历:
set.forEach(callback)
或for...of
- 添加:
-
-
键和值的存储:
Map
:存储键值对,键可以是任何类型,值也可以是任何类型。Set
:存储唯一的值,值只能是单一类型(不包含键)。
-
适用场景:
Map
:适用于需要频繁查询、更新键值对的数据结构,如缓存、字典、对象的属性管理等。Set
:适用于需要存储唯一值的数据结构,如集合操作、去重等。
示例代码
Map 示例:
let map = new Map();
map.set('name', 'John');
map.set('age', 30);
console.log(map.get('name')); // 输出: John
console.log(map.has('age')); // 输出: true
map.delete('age');
console.log(map.has('age')); // 输出: false
// 遍历
for (let [key, value] of map) {
console.log(`${key}: ${value}`);
}
Set 示例:
let map = new Map();
map.set('name', 'John');
map.set('age', 30);
console.log(map.get('name')); // 输出: John
console.log(map.has('age')); // 输出: true
map.delete('age');
console.log(map.has('age')); // 输出: false
// 遍历
for (let [key, value] of map) {
console.log(`${key}: ${value}`);
}
总结
Map
是键值对集合,适用于需要存储和操作键值对的场景,支持任何类型的键。Set
是唯一值的集合,适用于需要保证值唯一的场景,主要存储单一类型的值。
两者都有用于存储和操作数据的特性,但其用途和操作方式根据实际需求的不同而有所区别。