Set适合去重、存在性检查和集合运算,Map支持任意键类型、保持插入顺序,适用于对象作键、频繁增删和有序存储,相比Object更高效安全。

JavaScript中的Set和Map提供了比普通对象更灵活的数据存储方式,适合处理特定类型的问题。它们在实际开发中有很多实用场景。
Set的应用场景
Set用于存储唯一值的集合,自动去重,适合以下情况:-
数组去重:将数组转为Set再转回数组,快速去除重复元素。例如
[...new Set([1, 2, 2, 3])]得到[1, 2, 3]。 -
检查元素是否存在:Set的
has()方法性能优于数组的includes(),适合频繁查询的场景,比如判断用户权限、关键词过滤等。 -
集合运算:实现交集、并集、差集。例如两个数组求交集:
new Set([...set1].filter(x => set2.has(x)))。
Map的应用场景
Map允许任意类型的键,且保持插入顺序,适用于复杂键值映射:- 对象作为键:当需要以对象为键存储数据时,普通对象无法做到,而Map可以。例如缓存某个DOM节点的状态信息。
- 频繁增删键值对:Map在大量增删操作时性能优于普通对象,适合动态数据管理,如状态管理中的缓存机制。
- 需要保持插入顺序:Map遍历时按插入顺序返回键值对,适合需要有序结构的场景,比如记录用户操作历史或配置项顺序。
- 统计计数:用Map记录字符串出现次数、用户行为频次等,比普通对象更清晰且避免原型污染风险。
与Object相比的优势
Set和Map在某些方面优于传统Object:- Set天然支持去重,Object需要额外逻辑处理;
- Map的键不限于字符串或Symbol,支持任意类型;
- Map提供明确的大小属性
size,Object需手动计算; - Map的迭代更方便,原生支持
forEach和for...of。










