set
set是一种新型的数据结构,它类似与数组,但是成员的值都是唯一的,没有重复的值
基本用法
// 参数是数组
const set = new Set([1,2,3,4,3,5]);
[...set] // [1,2,3,4,5]
// 数组去重的用法
[...new Ser(array)]
set 实例的属性和方法
size
s.add(1).add(2).add(2)
s.size //2
操作方法
// 添加某个值,返回Set结构本身
s.add(1)
// 删除某个值,返回布尔类型,表示是否删成功
s.delete(1)
// 判断某值是不是Set成员,返回布尔类型
s.has(2)
// 清楚所有成员
s.clear();
// 将 Set 结构转化成 数组
const items = new Set([1,2,3,3]);
const arr = Array.from(items);
遍历操作
遍历器,任何数据结构只要部署了Iteration接口,便可以使用类似的方式完成遍历操作。它有自己的遍历方式
- 有四个遍历方法
- keys,返回键名的遍历器
- values,返回键值的遍历器
- entries,返回键值对的遍历器,单项是数组的形式
- forEach,使用回调函数遍历每个成员
- 因为
Set
结构没有键名,只有键值,所以keys
方法和values
方法的行为完全一致 -
Set
结构的实例默认可遍历,它的默认遍历器生成函数就是它的values
方法。因为默认可以遍历,可以直接使用for...of
遍历 -
forEach
对每个成员进行操作,第二个参数,context - 遍历的应用。
...
内部使用for..of
,因此,扩展运算符也可以用于Set结构
// 默认遍历器生成函数
Set.prototype[Symbol.iterator] === Set.prototype.values
// forEach
set.forEach((value,key) => console.log(value*2));
WeakSet
WeakSet 结构和 Set 相似,但是有以下不同
- WeakSet 成员只能是对象,不能是其他类型的值
- WeakSet 中是弱引用,如果其他地方不引用 WeakSet 中的对象,垃圾回收机制会自动回收。
语法
// 正确,数组中每一项是对象
const a = [[1,2],[3,4]];
const ws = new WeakSet(a);
// 错误
const a = [1,2];
const ws = new WeakSet(a);
WeakSet 操作方法
- add
- delete
- has
- 没有size属性,不能遍历
Map
对象,其实是字符串和值的松散集合,但是Map允许,值做键。
基本用法
// 对象做键
const m = new Map();
const o = {p: 'Hi'};
m.set(o,'content');
m.has(o); // true
m.get(o)
// 接受二维数组做参数
// 第二维,对应的就是键值
const map = new Map([
['name','yf'],
['title','hh']
]);
map.size //2
map.has('name'); // yf
// 参数也可以是set 和 map 类型
注意点
- 同一键赋值两次,后者覆盖前者
- 键不存在,返回
undefined
- 以下是不同的键
- 如果键是简单类型,数字,字符串,布尔值,需要全等。
null
和undefined
不等,但是NaN
看作同一个键
const a = ['z'];
const b = ['z'];
const map = new Map();
map
.set(a,1)
.set(b,2);
map.get(a); //1
map.get(b);//2
实例的属性和方法
- size
- set(key,val)
- get(key)
- has(key)
- delete(key)
- clear()
遍历方法
- keys()
- values()
- entries()
- forEach
与其他数据类型转化
WeakMap
WeakMap 和 Map 主要有以下不同
- WeakMap 只接受对象作为键名,null除外。
- Weabpack 的键名指向的对象,不计入垃圾回收机制
- 该数据结构主要的目的再某个对象上存放一些收据
基本使用
const wm = new WeakMap();
const element = document.getElementById('example');
wm.set(element,'some information');
实例方法
- set()
- get()
- delete()
- has()