欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ES6——Set&&Map集合

程序员文章站 2023-12-21 23:15:04
...

Set集合与Map集合

ES5中的Set集合和Map集合

ES5中常用Object的属性来模拟创建Set和Map集合
注:这种方式会存在诸多缺陷例如

        var map = Object.create(null);
		    map[5] = 'foo';

		console.log(map['5']);
		//即会map[5] 和 map['5']访问的属性是一样的

ES6中的Set集合

通过调用new Set()创建Set集合,实例一个Set集合对象。

Set集合对象属性:size  获取集合中元素的个数

Set集合对象方法:add()  向集合中添加元素
				has()  检测集合中是否存在某个元素
				delete()  移除指定的元素
				foEach(value, key, ownerSet)  使用方法和数组的forEach()类似,不过Set集合中的三个参数不同与数组的forEach
							                      - value     元素值
							                      - key       元素的索引
							                      - ownerSet  被遍历的Set集合本身

ES6中的Set结合对象的实例,每一个属性都是独立的,即不会上面所述ES5中存在的情况。并且Set结合会过滤掉重复传入的元素(即自动去重)

注:Set集合不能像数组那样通过索引来访问集合中的元素,如果需要,要把Set集合转换成一个数组

Set集合转换为数组

将数组转化为Set集合,直接通过将数组传入Set函数的构造函数即可。

例如:let set = new Set([1, 2, 3, 4]);

将Set集合转换为数组,只要通过[]的方式创建数组,并且通过…展开运算符将set集合传入[]中即可

例如: let set = new Set([1, 2]),
	  array = [...set];

前面以及提过Set集合可以去重,那么可以借助Set集合处理数组,进行去重。

Weak Set集合

在Set结合中添加元素,只能去除元素本身的引但是不能去除Set集合保留的引用。而Weak Set集合则可以解决这种情况。

WeakSet对象的方法:add()
				  has()
				  delete()   可以删除集合中指定的元素,并且去除集合中的引用
使用WeakSet集合对象需要注意:1. add()添加非对象参数会导致程序报错
						   2. has()和delete()方法传入非对象参数始终返回false
						   3. 不可迭代
						   4. 不支持size属性

ES6中的Map集合

Map是一种存储键值对的形式存储元素的有序列表,其中键名和对应的值支持所有数据类型。(键名的等价性可以通过Object.is()方法进行判断)

补充:Map与对象不同,对象的属性名总是会强制转换成字符串类型,但是Map中数字5和’5’是两种类型。

Map集合对象的属性:size   返回集合的长度
Map集合对象的方法:set(key, value)
				  get(key)
				  has(key)
				  delete(key)
				  clear()   清除Map集合中的所有键值对

Map集合的初始化方法

类似于Set集合的构造函数初始化的方式,可以向Map的构造函数中传数组的方式初始化Map集合,不过由于Map集合中的元素是以键值对的形式,所以传入数组必须是二维的数组,并且一个键值对对应二维中的一个数组。

例如:let map = new Map([['name', 'wjc'], ['age', '21']]);

Map集合的forEach()方法

和Set集合一样,不再做描述。

Weak Map集合

类似于WeaKSet集合,也是一种弱引用的Set集合,即可移除已加入元素的引用,并且添加元素的键名必须是一个非空对象,否则会报错。

用途:用于保存web页面中的DOM元素,例如一些JavaScript库就是通过自定义的对象保存每一个引用的DOM

当移除其他元素对改对象的引用以及设置该对象等于null WeakMap集合会自定移除对它的引用

WeakMap集合对象的方法:has()
					 get()
					 set()
					 delete()
Weak Map集合的初始化
let key1 = {},
key2 = {},
map = new WeakMap([[key1, 'wjc'], [key2, 21]]);		

注:每一个元素的键名必须是对象

上一篇:

下一篇: