

定义特性:Map是ES6引入的键值对集合,支持任意类型作为键(包括对象、函数等),保持插入顺序,提供O(1)时间复杂度的get/set/delete操作。
核心模型:
<K,V>结构,键唯一且不可直接修改entries()返回键值对迭代器,支持forEach遍历数学表达:Map可视为二元关系R={(k,v)|k∈K,v∈V},满足函数定义f:K→V

定义特性:Set是唯一值集合,值自动去重,保持插入顺序,提供O(1)时间复杂度的add/has/delete操作。
核心模型:
Object.is的等价判断,NaN视为相同值
拓扑特性:Set空间满足离散拓扑,任意两点不可连通
底层结构:数组+链表/红黑树,通过哈希函数映射存储位置
冲突解决:
扩容机制:默认初始容量16,负载因子0.75,扩容时容量翻倍
数据结构:自平衡二叉查找树,满足红黑树五条性质
操作复杂度:插入、删除、查找时间复杂度O(log n)
排序特性:按键/值的自然顺序或自定义Comparator排序
数据结构 | 键类型 | 顺序性 | 迭代方式 | 典型用例 |
|---|---|---|---|---|
Map | 任意类型 | 插入顺序 | 键值对迭代 | 动态属性管理 |
Set | 值类型 | 插入顺序 | 值迭代 | 数据去重 |
数组 | 数字索引 | 索引顺序 | 索引迭代 | 顺序存储 |
对象 | 字符串/Symbol | 无序 | 键迭代 | 静态属性存储 |
性能对比:
暂时无法在飞书文档外展示此内容
典型场景:
暂时无法在飞书文档外展示此内容
典型场景:
键弱引用:仅允许对象作为键,不影响垃圾回收
典型用例:
内存释放:
删除元素不立即释放内存,需容器销毁或shrink_to_fit()
频繁操作时注意内存碎片问题
性能优化:
批量操作使用for...of循环
避免深度嵌套Map/Set
预分配初始容量
错误示范:
暂时无法在飞书文档外展示此内容
正确方案:
暂时无法在飞书文档外展示此内容
问题表现:
暂时无法在飞书文档外展示此内容
解决方案:
JSON.stringify转换后存储测试环境:Chrome浏览器,100万条数据
操作 | Set耗时 | Map耗时 | 差异分析 |
|---|---|---|---|
插入 | 20-30ms | 30-40ms | Map多键值对处理 |
查找 | 15-25ms | 25-35ms | Map需额外哈希计算 |
内存占用 | 80MB | 160MB | Map存储键值对 |
结论:
Map和Set是Vue开发者处理复杂数据的两把利器。理解它们的数学本质、内部实现和性能特性,结合Vue的响应式系统,能显著提升开发效率和代码质量。
记住:当需要键值对时选Map,当需要唯一值集合时选Set,这个原则能解决90%的选择难题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。