Map和Set、Map和Object的区别
Map 和 Object 的区别
特性上的区别:
Map 更适合”键值对”这种数据结构。Object 的键只能是 string、整数、Symbol 类型,Map 的键可以是任意类型。
Map 实现了迭代协议,可用 for…of 遍历,而 Object 不行, Object 是不可迭代的。
Map 可用 size 属性获取长度,而 Object 没有获取长度的属性。
Map 遍历顺序可以保证,按插入时输出。
而 Object 无法保证,Object 的遍历顺序为:
- 当 key 类型为
Number
,按 key 从小到大排序 - 当 key 类型为
String
,会被转为Number
类型,按 key 从小到大排序 - 当 key 类型为
Symbol
,按创建的时间升序排序
1 | let obj = new Object(); |
当数据量大(长度为十几万以上)的时候,Map 的读入、写入、删除会比 Object 更快,数据量小的时候差别不多,object 稍微好一点点点
Map 的使用场景:
- 聊天内容与聊天列表
- 数据量大、频繁的写入、更新、对写入顺序有要求
- 策略模式
- 用于储存多个键值对应一个规则的情况
Map 和 Set 的应用
set:
- 去重
1 | // 写法一 |
- 取并集、交集、差集
1 | const arr1 = new Set([1, 2, 3, 4, 5]); |
map:
可以使用任意的数据类型作为键,比对象更合适
Array.from
可以将类数组和可遍历(iterator)对象转换为真正的数组。
1 | Array.from(new Set([1, 2])); // [1, 2] |
Map 和 Set 的区别
不同点
Set 结构类似于数组,成员唯一,没有排序的概念。Map 结构它保存的是键值对的集合。
添加成员的方法不同:
Set 使用 add 方法 ,如:set.add(6),Map 使用 set 方法,如 map.set(‘key’, ‘value’)
获取成员的方法不同:
Set 结构没有排序的概念,无法获取单个成员。Map 结构使用 map.get(‘key’) 获取成员的值。
相同点
Map 和 Set 都是 es 的新增的数据结构。
拥有同样的遍历方法:
keys()、values()、entries()、forEach()