明天小编和大家一起探讨一下援用类型中的map,在其中会有一些map与数组联结利用,还有和map相似的weakmap类型的阐明,这篇文章同时也减少了一些操作数组的方法和理论利用。大家还能够关注我的微信公众号,蜗牛全栈。
一、map的申明

let s = new Set([1,2,3])console.log(s) // Set(3){1,2,3}// map中的数据不会呈现反复的状况,如果反复,会将反复的元素去掉。能够利用这一个性,对数组进行去重等解决let s = new Set([1,2,3,1])console.log(s) // Set(3){1,2,3}

二、向map中增加元素:应用add办法

let s = new Set([1,2,3])s.add("school")console.log(s) // Set(4){1,2,3,"school"}// 能够通过链式增加,将元素增加到map中let s = new Set([1,2,3])s.add("school").add("bus")console.log(s) // Set(5){1,2,3,"school","bus"}

三、删除map中的元素:应用delete办法

let s = new Set([1,2,3])s.delete(2)console.log(s) // Set(2){1,3}

四、清空map内的全副元素:调用clear办法

let s = new Set([1,2,3])s.clear()console.log(s) // Set(0){}

五、判断map中是否含有某个元素:调用has办法

let s = new Set([1,2,3])console.log(s.has(2)) // true

六、获取map中元素个数:调用size

let s = new Set([1,2,3])console.log(s.size) // 3

七、map的遍历

let s = new Set([1,2,3])s.forEach(item => console.log(item)) // 1 2 3for(let item of s){    console.log(item) // 1 2 3}for(let item of s.keys()){    console.log(item) // 1 2 3}for(let item of s.values()){    console.log(item) // 1 2 3}// 对于map,key和value是一样的for(let item of s.entries()){    console.log(item) // [1,1] [2,2] [3,3]}

八、理论利用
1、数组去重

let arr = [1,2,3,3,3,2,1]let s = new Set(arr)console.log(s) // Set(3){1,2,3}console.log([...s]) // [1,2,3]console.log(Array.from(s)) // [1,2,3]

2、数组合并后去重

let arr1 = [1,2,3,4]let arr2 = [2,3,4,5,6]let s = new Set([...arr1,...arr2])console.log(s) // Set(6){1,2,3,4,5,6}console.log([...s]) // [1,2,3,4,5,6]console.log(Array.from(s)) // [1,2,3,4,5,6]

3、求两个数组的交加

let arr1 = [1,2,3,4]let arr2 = [2,3,4,5,6]let s1 = new Set(arr1)let s2 = new Set(arr2)let result = new Set(arr1.filter((item) => s2.has(item)))console.log(result) // Set(3){2,3,4}

4、求两个数组差集

let arr1 = [1,2,3,4]let arr2 = [2,3,4,5,6]let s1 = new Set(arr1)let s2 = new Set(arr2)let s3 = new Set(arr1.filter((item) => !s2.has(item)))let s4 = new Set(arr2.filter((item) => !s1.has(item)))console.log(s3) // Map(1){1}console.log(s4) // Map(1){5,6}console.log([...s3,...s4]) // [1,5,6]

九、WeakMap:外面只能寄存Object,不能寄存其余数据类型

let ws = new WeakSet()// ws.add(1) // 报错:因为1不是Object类型,不能增加到WeakMap中ws.add({    name:"lilei"})ws.add({    age:12})console.log(ws) // WeakSet{{...},{...}}

1、删除对象

let ws = new WeakSet()// ws.add(1) // 报错:Invalid value used in weak setws.add({    name:"lilei"})ws.add({    age:12})ws.delete({    name:"lilei"})console.log(ws) // WeakSet{{...},{...}} 删除之后没有失效,因为对象是援用数据类型,增加对象的地址和删除元素的地址不统一,导致不能删除let ws = new WeakSet()const obj1 = {name:"lilei"}const obj2 = {age:12}ws.add(obj1)ws.add(obj2)console.log(ws) // WeakSet{{...},{...}}ws.delete(obj1)console.log(ws) // WeakSet{{...}} // 曾经删除了{name:"lilei"}内容,次要就是因为对象属于援用类型,间接在delete写对象与前一个对象在堆内存中指向的不是同一个地址console.log(ws.has(obj2)) // true 判断外部是否含有obj2对象,与map雷同,应用has函数

2、循环遍历:js中不能对WeakMap类型数据进行循环遍历,这个与垃圾回收(GC)无关,具体机制小编还不是很分明,在今后的文章中会补上这一课。

let ws = new WeakSet()const obj1 = {name:"lilei"}const obj2 = {age:12}ws.add(obj1)ws.add(obj2)ws.forEach(item => console.log(item)) // 报错:ws.forEach is not a function