es6 Set 和 WeakSet

本文详细介绍了JavaScript中的Set数据结构,包括其特性、方法及如何用于数组去重。同时,讲解了WeakSet的概念,强调其成员只能是对象且无法遍历,适合存储弱引用的对象。通过示例展示了WeakSet的基本操作如添加、删除成员及检查成员存在性。
摘要由CSDN通过智能技术生成

一.Set

1.set数据结构类似于数组,内部值是唯一的不能重复。

2.Set本身是一个构造函数,用来生成 Set 数据结构。

使用set方法进行数组去重:

	let a = [1, 1, 2, 3, 3, 2, 5, 4, 6, 5, 4];
    let arr = new Set(a);
    console.log(arr);//输出:1,2,3,4,5,6

	let m = [11, 1, 1, 1, 2, 3, 2, 4];
    let m1 = [...new Set(m)];
    console.log(m1);//输出:Array(5) [ 11, 1, 2, 3, 4 ]

3.Set 实例的属性
(1)Set.prototype.constructor:构造函数,默认就是Set函数。
(2)Set.prototype.size:返回Set实例的成员总数。

4.Set 实例的方法
(1)Set.prototype.add(value):添加某个值,返回 Set 结构本身。
(2)Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
(3)Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
(4)Set.prototype.clear():清除所有成员,没有返回值。

	let sets = new Set([1, 2, 3, 4, 5]);
    sets.add('a');//添加
    console.log(sets.has('a'));//检测,返回布尔值
    console.log(sets.delete('a'));//删除,返回布尔值
    sets.clear();//清除所有
    console.log(sets);//输出:Set(0)

5.Set实例的遍历
(1)Set.prototype.keys():返回键名的遍历器
(2)Set.prototype.values():返回键值的遍历器
(3)Set.prototype.entries():返回键值对的遍历器
(4)Set.prototype.forEach():使用回调函数遍历每个成员
注意:Set 结构的键名就是键值(两者是同一个值)

	let setarr = new Set([1, 2, 3, 4, 5]);
	
    console.log(setarr.keys());//输出:Set Iterator {  }
    for (let key of setarr.keys()){
        console.log(key);//输出:1 2 3 4 5
    }
    
    console.log(setarr.values());//输出:Set Iterator {  }
    for (let key of setarr.values()){
        console.log(key)//输出:1 2 3 4 5
    }

	console.log(setarr.entries());//输出:Set Iterator {  }
    for (let key of setarr.entries()){
        console.log(key)//输出:Array[key:value]
    }

	let set = new Set([1, 4, 9]);
	set.forEach((value, key) => console.log(key + ' : ' + value));

二.WeakSet

1.WeakSet 结构与 Set 类似,也是不重复的值的集合。

2.WeakSet 的成员只能是对象,而不能是其他类型的值。

3.WeakSet 是一个构造函数,可以使用new命令创建 WeakSet 数据结构。

4.WeakSet 没有size属性,没有办法遍历它的成员。

	//h是一个数组,它有两个成员,也都是数组
	//将h作为weak构造函数的参数,h的成员会自动成为weak的成员(并非h数组本身)
	let h = [[1, 2], [3, 4]];
    let weak = new WeakSet(h);
    console.log(weak);//输出:WeakSet {[1, 2], [3, 4]}

5.WeakSet 结构的方法
(1)WeakSet.prototype.add(value):向 WeakSet 实例添加一个新成员。
(2)WeakSet.prototype.delete(value):清除 WeakSet 实例的指定成员。
(3)WeakSet.prototype.has(value):返回一个布尔值,表示某个值是否在 WeakSet 实例之中。

	let h = [[1, 2], [3, 4]];
    let weak = new WeakSet(h);
	weak.add({});
    weak.add([5, 6]);
    let so = {};
    weak.add(so);
    console.log({} === {});//输出:false
    console.log(weak.has([5, 6]));//输出:true
    console.log(weak.has(so));//输出:true
    console.log(weak);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值