Set、Map集合的差别

Set

定义:类似于数组的数据结构,成员值都是唯一且没有重复的值

声明:const set = new Set(arr)

入参:具有Iterator接口的数据结构

属性

constructor:构造函数,返回Set
size:返回实例成员总数
方法

add():添加值,返回实例
delete():删除值,返回布尔值
has():检查值,返回布尔值
clear():清除所有成员
keys():返回以属性值为遍历器的对象
values():返回以属性值为遍历器的对象
entries():返回以属性值和属性值为遍历器的对象
forEach():使用回调函数遍历每个成员
应用场景

去重字符串:[...new Set(str)].join("")
去重数组:[...new Set(arr)]或Array.from(new Set(arr))
集合数组
声明:const a = new Set(arr1)、const b = new Set(arr2)
并集:new Set([...a, ...b])
交集:new Set([...a].filter(v => b.has(v)))
差集:new Set([...a].filter(v => !b.has(v)))
映射集合
声明:let set = new Set(arr)
映射:set = new Set([...set].map(v => v * 2))或set = new Set(Array.from(set, v => v * 2))
重点难点

遍历顺序:插入顺序
没有键只有值,可认为键和值两值相等
添加多个NaN时,只会存在一个NaN
添加相同的对象时,会认为是不同的对象
添加值时不会发生类型转换(5 !== "5")
keys()和values()的行为完全一致,entries()返回的遍历器同时包括键和值且两值相等

map

定义:类似于对象的数据结构,成员键可以是任何类型的值

声明:const set = new Map(arr)

入参:具有Iterator接口且每个成员都是一个双元素数组的数据结构

属性

constructor:构造函数,返回Map
size:返回实例成员总数
方法

get():返回键值对
set():添加键值对,返回实例
delete():删除键值对,返回布尔值
has():检查键值对,返回布尔值
clear():清除所有成员
keys():返回以键为遍历器的对象
values():返回以值为遍历器的对象
entries():返回以键和值为遍历器的对象
forEach():使用回调函数遍历每个成员
重点难点

遍历顺序:插入顺序
对同一个键多次赋值,后面的值将覆盖前面的值
对同一个对象的引用,被视为一个键
对同样值的两个实例,被视为两个键
键跟内存地址绑定,只要内存地址不一样就视为两个键
添加多个以NaN作为键时,只会存在一个以NaN作为键的值
Object结构提供字符串—值的对应,Map结构提供值—值的对应

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容