Set
定义
- new Set([1,2,3,4])
【注】:
添加进的时候,不进行类型转换,内部是在===的基础上进行了补充(NaN===NaN)。
因此5和”5”是两个不同的值
两个空对象可以同时加入
NaN只能添加一个
用途:
数组去重1[...new Set(array)]
方法
操作方法
遍历方法
对象的是Object.keys()
set是set1.keys(),同set1.values()123456789101112let set1 = new Set(['red', 'green', 'blue']);//返回值相同for(let item of set1.keys())for(let item of set1.values())for(let item of set1)for (let item of set.entries()) {console.log(item);}// ["red", "red"]// ["green", "green"]// ["blue", "blue"]用途
12345678910111213let a = new Set([1, 2, 3]);let b = new Set([4, 3, 2]);// 并集let union = new Set([...a, ...b]);// Set {1, 2, 3, 4}// 交集let intersect = new Set([...a].filter(x => b.has(x)));// set {2, 3}// 差集let difference = new Set([...a].filter(x => !b.has(x)));遍历的同时进行改变
12345678// 方法一let set = new Set([1, 2, 3]);set = new Set([...set].map(val => val * 2));// set的值是2, 4, 6// 方法二let set = new Set([1, 2, 3]);set = new Set(Array.from(set, val => val * 2));
weakset
与set的区别在于,它的成员只能是对象,也就是说,即使是通过new WeakSet(arr)定义的,arr的成员才是weakset的成员,因此如果arr只是【1,2】这种,是不行的。
接受一个数组或类似数组的对象作为参数
- 方法
操作:比set少clear()方法,没有forEach,没有size属性
遍历:成员不可遍历
不是很明白的点:
弱引用
Map
比传统的Object更为拓展,key不限于字符串
使用
123456
var m = new Map()map.set(key,value)//也接受以数组作为参数var m = new Map([[k1,v1],[k2,v2],[]])
注意
- 对一个key多次赋值,会覆盖
- 未知key,返回undefined
- key与内存地址绑定,所以比较key的时候实际上是按引用来看的
属性和方法
set中是add delete clear has.
map中是set delete clear get
操作方法
123456789//set 返回map自身,因此可以链式调用m.set("edition", 6) // 键是字符串m.set(262, "standard") // 键是数值m.set(undefined, "nah")//get 未知则undefinedm.get('')//has(key),clear()遍历方法
keys.values() entries() forEach().同set的12345678for (let [key, value] of map.entries()) {console.log(key, value);}// 等同于使用map.entries()for (let [key, value] of map) {console.log(key, value);}
转数组
|
|
与其他类型的转换
- 数组
- 对象
- json
具体见教程
weakmap
跟weakset差不多