2021 中国.NET开发者峰会近50场热
821 2023-04-03 04:05:09
Set:是一种新的数据结构,类似于数组,但是里面的值都是唯一的
set本身是一个构造函数,可以通过const set = new Set()来创建一个set类型的值,通过构造函数创建后,会得到set原型上的一些方法
ps:通过构造函数创建新对象的过程,开辟一块新内存,创建一个空对象,设置原型继承原型上的方法,绑定this,执行构造函数中的方法,返回这个新对象
一般可以用set去除数组中的重复元素:[...new Set(array)], Array.from(new Set(array))]
Set上的一些方法:
add(): 添加元素
delete():删除某个值
has(): 判断set中是否有这个值
clear():清空所有值
遍历操作:
keys():返回键名
values(): 返回键值
entries():返回键值对
forEach():使用回调函数遍历每个成员
let set = new Set(['red', 'green', 'blue']);for (let item of set.keys()) { console.log(item);}// red// green// bluefor (let item of set.values()) { console.log(item);}// red// green// blue
let set = new Set(['red', 'green', 'blue']);
// for...of 循环(set数据结构默认可遍历,可以直接用for of 循环替换values())for (let x of set) { console.log(x);}// red// green// blue
for (let item of set.entries()) { console.log(item);}// ["red", "red"]// ["green", "green"]// ["blue", "blue"]
使用forEach循环
let set = new Set([1, 4, 9]);set.forEach((value, key) => console.log(key + ' : ' + value))// 1 : 1// 4 : 4// 9 : 9
可以间接使用数组中的方法
let set = new Set([1, 2, 3]);set = new Set([...set].map(x => x * 2));// 返回Set结构:{2, 4, 6}let set = new Set([1, 2, 3, 4, 5]);set = new Set([...set].filter(x => (x % 2) == 0));// 返回Set结构:{2, 4}
WeakSet:
与Set的区别:
WeakSet 的成员只能是对象,而不能是其他类型的值。
WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用
weakSet中的一些方法:
add(), delete(), has()