Set、WeakSet、Map以及WeakMap结构基本知识点

### set
1、set类似于数组,但是成员都是唯一的,没有重复的值;

2、Set本身是一个构造函数,用来生成Set数据结构
```
const s = new Set();
let arr =[2,3,4,2,3,4,3];
arr.forEach(x => s.add(x));
for(let i of s){
    console.log(i);
};
```
- set中两个对象总是不相等的;
- set中两个NAN是视为相等的;

3、set实例属性有:
- Set.prototype.constructor  默认是Set函数
- Set.prototype.size 返回set实例的成员数

4、set实例的方法有:
- add(value)
- delete(value)
- has(value)
- clear(value)
- keys():返回键名的遍历器
- values():返回键值的遍历器
- entries():返回键值对的遍历器
- foreach():使用回调函数遍历每个成员

**备注**:由于set结构没有键名只有键值,所以keys和values方法的行为完全一致;

==问题1:用set结构实现交并差==
```
let s = new Set([1,2,3]);

let m = new Set([3,4,5]);

//并集
let union = new Set([...s,...m]);

//交集
let intersect = new Set([...s].filter(x => m.has(x)));

//差集
let difference = new Set([..a].filter(x => !m.has(x)));

```
==问题2:扩展运算符 ... 的作用==

- 可以将数组变成参数列表
- 可以将set结构数据转换到数组中,从而使用数组的方法
```
let a = new Set([1,2,3,4]);

var b = [...a]//b为数组

var c = []

c.push(...a)//将a转为参数列表,然后push金数组c中
```
==问题3:如何去除数组重复成员==

```
var arr = [1,1,2,3,4,];

arr = Array.from(new Set(arr));//arr=[1,2,3,4]

```

## WeakSet

1. 成员不重复,成员只能是对象,成员是弱引用,即垃圾回收机制不会考虑weakset对该对象的引用;该数据结构不可比遍历;
2. WeakSet结构有三种方法
- WeakSet.prototype.add(value)
- WeakSet.prototype.has(value)
- WeakSet.prototype.delete(value)


## Map

1、类似于对象,但键不限于字符串;

2、实例属性:.size

3、实例操作方法:
- .set(key,value);
- .has(key)
- .get(key)获得key的值
- .delete(value)
- .clear()

4、实例的遍历方法
- keys()
- values()
- entries()
- forEach()

5、与其他数据结构的相互转换,包括Map转为数组?数组转为Map?Map转为对象?对象转为Map?Map转为json?json转为Map

## WeakMap

1、与Map的区别
- 键名只能为对象,不接受其他类型作为键名;
- 键名是弱引用,不计入引用计数;键值是正常引用,计入引用计数;

==问题1:一般什么时候用这种结构?==

答:当想往对象上添加数据,又不想干扰垃圾回收机制时,方可使用;一个典型应用场景是,在网页的 DOM 元素上添加数据,就可以使用WeakMap结构。当该 DOM 元素被清除,其所对应的WeakMap记录就会自动被移除。
总之,WeakMap的专用场合就是,它的键所对应的对象,可能会在将来消失。WeakMap结构有助于防止内存泄漏。
```
const wm = new WeakMap();

const element = document.getElementById('example');

wm.set(element, 'some information');
wm.get(element) // "some information"
```

2、只有四个方法,与WeakSet类似,都不可遍历,因此并没有遍历操作的方法;
- .set()
- .get()
- .has()
- .delete()

猜你喜欢

转载自blog.csdn.net/Alexbyy/article/details/79520239