Map 和 Set 是 JavaScript 中两种常用的数据结构,它们都是 ES6 引入的,相比于普通的对象(Object)和数组(Array),Map 和 Set 提供了更多的灵活性和功能。
1. Map 和 Set 的定义
Map:是一种键值对(key-value)的集合,类似于对象(Object),但是它的键(key)可以是任何类型的值,而不仅仅是字符串或符号。
特点:
Set:是一个集合(set),其中每个元素都是唯一的。可以存储任何类型的值,但不允许重复的元素。
特点:
2. Map 和 Set 的区别

3. 实际应用场景
Map 的应用场景:
map.set(1, 'apple');
map.set('name', 'John');
console.log(map.get(1)); // 'apple'
console.log(map.get('name')); // 'John'
需要任意类型作为键:当需要将对象、数组、函数等作为键时,Map 比对象更有优势。
const objKey = { id: 1 };
const map = new Map();
map.set(objKey, 'User Info');
console.log(map.get(objKey)); // 'User Info'
维护插入顺序:Map 保证键值对按插入顺序排序,适合需要按照插入顺序遍历的场景。
const map = new Map();
map.set(2, 'two');
map.set(1, 'one');
map.set(3, 'three');
for (let [key, value] of map) {
console.log(key, value);
}
// 输出:
// 2 'two'
// 1 'one'
// 3 'three'
Set 的应用场景:
console.log(set); // Set { 1, 2, 3, 4 }
检查元素是否存在:Set 提供了 .has(value) 方法,可以高效地检查某个元素是否已经存在。
console.log(set.has(2)); // true
console.log(set.has(4)); // false
集合运算:Set 可以非常方便地做集合运算,例如交集、并集、差集等。通过 Set 和 Map 可以轻松实现一些数学集合操作。
// 并集
const setA = new Set([1, 2, 3]);
const setB = new Set([3, 4, 5]);
const union = new Set([...setA, ...setB]);
console.log(union); // Set { 1, 2, 3, 4, 5 }
快速查找:由于 Set 内部是基于哈希表实现的,因此它的查找效率高于普通的数组,尤其是在需要频繁查找某个值时。
console.log(set.has(3)); // true
4. 性能对比
const arr = [1, 2, 3, 4, 5];
console.log(arr.indexOf(3)); // O(n)
const set = new Set([1, 2, 3, 4, 5]);
console.log(set.has(3)); // O(1)
总结:

参考文章:原文链接
该文章在 2025/12/4 9:14:27 编辑过