关于阅读 ES6- Set和Map 整理的问题

1、Set数据结构

答:是ES6新增的一种数据结构,类似于数组,里面的值是唯一不可重复的
Set本身是一个构造函数,需要通过new关键字创建实例,进而生成Set数据结构
let s1 = new Set([1,2,3,4,5]) // 入参为 数组对象
let s2 = new Set()
s2.add(1) // 通过add添加Set成员
let s3 = new Set([…document.querySelectorAll(‘div’)]) // 入参为类数组对象

2、Set数据结构特点

答:里面的值都是唯一不可重复的。
故而可以实现数组去重 [new Set(arr)] 或者字符串中字符去重 […new Set(‘abbbs’)].join(‘’);
向Set中添加的值不会进行数据类型的转换,例如传入 5 和 ‘5’,是不同的两个值;
Set中添加简单数据类型的值,如果值和类型是一样的,那么会进行去重来保证Set中值的唯一性;
Set中添加复合数据类型的值,都是不同的。
let s = new Set()
s.add(5); s.add(‘5’); s.size; // 2 数值5和字符串5是不一样的值
s.add({}); s.add({}); s.size; //4 对象和对象都是不一样的
s.add(NaN); s.add(NaN); s.size; //5 两次添加NaN,实际只能添加一个

3、Set实例的属性和方法有哪些

答:属性有:constructor和size;方法有add()、delete()、has()、clear()方法
Set.prototype.constructor 是Set的构造函数,默认就是Set函数
Set.prototype.size 返回Set实例成员的数量
let s = new Set()
s.add(1).add(2).add(2) // 添加成员
s.size // 2 获取成员总数量
s.delete(1) // 删除成员
s.has(1) // false 是否包含成员1
s.clear() // 清除所有成员

4、Set结构转为数组的方法

答:使用扩展运算符-------- […new Set([1,2,3])]
使用Array.from()方法 ----------Array.from(new Set([1,2,3]))
使用Set.keys()+ for…of遍历------for (let value of ss.keys()) {}
使用Set.values()+ for…of遍历------for (let value of ss.values()) {}
使用Set.entries() + for…of遍历------for (let [key, value] of ss.entries()) {}
使用forEach遍历 -----------ss.forEach(item => {console.log(item)})
使用for…of遍历 ---------- for (let value of ss) {}

5、Set的遍历操作有哪些

答:keys() 返回键名的遍历器
values()返回键值的遍历器
entries()返回键值对的遍历器
forEach()遍历
for…of遍历
注意Set构造函数的实例默认可以遍历,遍历器默认就是Set的values()方法。
这就意味着可以省略values方法,直接使用for…of遍历
Set.prototype[Symbol.iterator] === Set.prototype.values

6、如何在利用已有的Set数据结构,生成新的Set数据结构

答:方式1,使用遍历,并在遍历中处理原有Set中的数据
let s1 = [1, 2, 3];
s1 = new Set([…s1].map(val => val*2)) // s1 的值为 2, 4, 6
s1 = new Set([…s1].filter(val => val > 3)) // s1 的值为 4, 6

方式2,使用Array.from()
let s2 = [1, 2, 3]
s2 = new Set(Array.from(s2, val => val*2)) // s2 的值为 2, 4, 6

7、WeakSet数据结构

答:与Set数据结构类似,不过其成员必须是对象,不能是其他数据类型
varws = new WeakSet(1) // 报错
var ws = new WeakSet(Symbol()) // 报错
var ws = new WeakSet([[1,2], [2,3]]) // 正确
ws.add({}) // 正确

8、WeakSet的特点

答:成员只能是对象
WeakSet中的成员对象都是弱引用,随时可能消失,垃圾回收机制不考虑它里面对象的引用
WeakSet因为对象是弱引用,随时可能小时,所以不可遍历
WeakSet没有size属性,没有forEach遍历,使用时会返回undefined
WeakSet有add()、delete()、has()方法

9、垃圾回收机制

答:垃圾回收机制依赖于引用计数。如果一个值的引用次数不为0,垃圾回收机制就不会释放它的内存。
反之引用次数为0,便会释放这个变量的内存,进行回收

10、Set怎么实现交集、并集、差集

答:并集 let res = new Set([…set1, …set2])
交集 let res = new Set([…set1].filter(val => set2.has(val)))
差集 let res = new Set([…set1].filter(val => !set2.has(val)))

11、Map数据结构

答:是键值对的集合,键可以是各种数据类型。
Map是构造函数,需要通过 new 关键字进行实例化,入参参数可以是一个二维数组
let m = new Map([[0, 111], [false, 2], [‘a’, 3], [NaN, ‘NaN’], [{}, 444]])
m.set(‘aaaa’, 22222)

12、Map和普通对象的区别

答:它们都是键值对的集合,如果添加相同的键,都会将对应的值进行覆盖;
读取到不存在的键,都会返回undefined;
普通对象只能使用字符串来作为对象的键,Map的键可以是任意数据类型;
Map的键如果是简单数据类型(数值、字符串、布尔值),那么只要两个键严格相等,就会被视为同一个键;
Map的键如果是复合数据类型,那么键是和内存地址绑定在一起的,只要内存地址不一样,就是不同的键。

13、Map实例的属性和方法

答:size属性,用来返回Map结构中成员的数量------ let m = new Map([[1,2], [3,4]]) ; m.size // 3
set(key,value)方法,设置Map结构中key所对应的值-----let m = new Map([[1,2], [3,4]]) ; m.set(111, 222)
get(key)方法,获取键对应的值,没有找到则返回undefined-----let m = new Map([[1,2], [3,4]]) ; m.get(1) // 2
has(key)方法,判断某个键是否存在Map数据结构中----------let m = new Map([[1,2], [3,4]]) ; m.has(1) // true
delete(key)方法,删除某个键,成功返回true,失败返回false–let m = new Map([[1,2], [3,4]]) ; m.delete(1) // true
clear()方法,清除Map数据结构中所有的成员–let m = new Map([[1,2], [3,4]]) ; m.clear()

14、Map的遍历方法

答:keys()方法,获取键名的遍历器 --for (let key of map.keys()) {}
values()方法,获取键值的遍历器–for (let value of map.values()) {}
entries()方法,获取所有成员的遍历器–for (let [key, value] of map.entries()) {}
forEach()方法,遍历所有成员–for (let [key, value] of map){}

15、Map结构转为数组

答:扩展运算符 ----let res = […new Map(arr)]
Array.from()方法 — let res = Array.from(new Map(arr)))
for…of遍历
for.of遍历 + entries()方法
forEach()遍历

16、WeakMap数据结构及其特点

答:和Map数据结构类似,可以用于生成键值对。
WeakMap是构造函数,需要通过new关键字进行创建实例。
WeakMap的键只能是对象或者null,不可以是其他数据类型。
WeakMap的键名所引用的对象是弱引用,不计入垃圾回收机制,但会自动消除,有助于防止内存泄漏
WeakMap没有size属性,没有遍历操作
let wp = new WeakMap()
wp.set(1, 2) // 报错
wp.set({}, 111) // 正确

17、WeakMap的方法有哪些

答:set()方法,用于键及值
get()方法,用于获取键对应的值
delete()方法,用于删除键
clear()方法,用于清除所有成员

18、WeakMap的应用有哪些

答:可以让DOM节点作为键名;当DOM节点删除,就会自动清除WeakMap上的键,防止内存泄漏
可以部署对象或者类的私有内部属性;当对象或者类的实例被删除,对应的内部私有属性也会被删除,防止内存泄漏

19、node中如何查看内存占用情况和手动执行垃圾回收机制

答:首先打开node命令行, node --expose-gc
手动执行垃圾回收,global.gc()
查看内存占用情况,process.memoryUsage()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值