九、ES6中键值对集合
Set 集合
set 集合是键唯一的集合。
1 | let set = new Set([1, 2, 3, 4, 5, 2]); |
NaN
、undefined
等值允许存储在 set 集合中。其在 set 集合中是相等的。
1
2let set = new Set([NaN, NaN, undefined, undefined, null, null]);
console.log(set); // Set { 1 NaN, undefined, null }空数组、空对象、空函数不会被认为是同一个
1
2let set1 = new Set([[], [], {}, {}]);
console.log(set1); //Set { [], [], {}, {} }
Set 对象的属性和方法
属性
size
属性
相当于数组中的 length 属性
1 | let set = new Set([1, 2, 3, 4, 5]); |
方法
操作 Set 集合的方法
方法名称 | 描述 |
---|---|
add(value) | 在 Set 集合尾部添加一个元素,返回该 Set 对象 |
delete(value) | 从 Set 集合删除指定的元素。返回布尔值,表示是否删除成功 |
has(value) | 检索 Set 集合是否包含指定的元素。返回布尔值,表示是否包含 |
clear() | 清除 Set 集合中的所有元素,没有返回值。 |
1 | let set = new Set([1, 2, 3, 4, 5]); |
遍历 Set 集合的方法
方法名称 | 描述 |
---|---|
values() | 返回一个新的迭代器对象,该对象包含 Set 集合中的按插入顺序的所有元素的值 |
keys() | 与values() 方法相同 |
entries() | 返回一个新的迭代器,该对象包含 Set 集合中的按插入顺序排列的所有元素的值的[value,value]数组 |
forEach() | 按照插入顺序,为 Set 集合中的每一个元素调用一次 callback 函数 |
1 | let set = new Set([1, 2, 3, 4, 5]); |
Set 集合中键与值相同。
Set 集合和 Array 对比
对象集合的优势
- 数组中用于判断元素是否存在的
indexOf()
函数效率低下。 - Set 对象允许根据值删除元素,而数组中必须使用基于下标的
splice()
方法。 - 数组的
indexOf()
方法无法找到 NaN 值。 - Set 对象存储不重复的值,所以不需要手动处理包含重复值的情况。
WeakSet 是什么
用于存储对象的集合,并且每个对象只能出现一次。
- 只能存放对象,不能存放值。
- 存储的对象值都是被弱引用。
WeakSet 提供的操作方法与 Set 提供的操作方法相同。但其没有遍历方法。
1 | // WeakSet集合只能存储对象 |
Map 集合
Map 集合是键值对的集合。任何值都可以作为 Map 集合中的键或值。Map 集合可以按照插入的顺序迭代它的元素。
方法名称 | 描述 |
---|---|
set(key,value) | 设置 Map 对象中键的值。返回该 Map 对象 |
get(key) | 返回键对应的值。如果不存在,则返回 undefined |
delete(key) | 从 Map 集合删除指定的键值对。返回布尔值,表示是否删除成功 |
has(key) | 检索 Map 集合是否包含指定键值对对应的值。返回布尔值,表示是否包含 |
clear() | 清楚 Map 集合中所有键值对,没有返回值 |
values() | 返回一个新的迭代器对象,该对象包含 Map 集合中所有元素的值 |
keys() | 与values() 方法相同 |
entries() | 返回一个新的迭代器对象,该对象包含 Map 集合中的按插入顺序排列的所有元素的值[key,value]数组 |
forEach() | 按照插入顺序,为 Map 集合中的每一个元素调用一次 callback 函数 |
1 | // 创建Map集合 |
Map 集合的键的比较是基于“SameValueZero”算法:
- 判断使用
===
相似的规则 - -0 和+0 相等
- NaN 与自身相等
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小康博客!
评论
TwikooWaline