❤️

ARCHAI

Undergraduate / Rookie

Back

JavaScript基础之Set与Weakset

Set类型

1.属性

👉 size :数组长度

let set = new Set([1, 2, 3])

console.log(set.size);//9

👉 add() :添加元素

console.log(set.add(99));//返回修改后的数组Set(4) { 1, 2, 3, 99 }
console.log(set);//原数组已经被修改Set(4) { 1, 2, 3, 99 }

👉 delete() :删除元素

console.log(set.delete(99));//true
console.log(set);//Set(3) { 1, 2, 3 }

👉 has() :有某个元素

console.log(set.has(3)); //true

👉 clear():清空数组

set.clear()//返回undefined
console.log(set);//Set(0) {}

2.遍历Set

👉 forEach() 方法

let set=new Set(['jqf','fin','zzh'])
set.forEach((value, samevalue, set) => {
    console.log(value);//jqf,fin,zzh
    console.log(samevalue);//jqf,fin,zzh
    console.log(set);//Set(3) { 'jqf', 'fin', 'zzh' }
})

//这里回调中的参数,前两个都是一样的值,
//第三个参数为遍历的Set

👉 [...set] 把Set类型转为普通数组,再遍历

[...set].map((v) => {
    console.log(v);
})

//就可以用到遍历普通数组的多种方法

3.利用Set实现数组去重

说明: Set中不会存在重复的元素,利用这一特性,可以达到快速去重的目的

let arr = [1, 2, 3, 2, 1, 4, 3, 2]

arr = [...new Set(arr)]

console.log(arr);//[1,2,3,4]

4.交并差集的实现

👉 并集

let a=new Set([1,2,3])
let b=new Set([2,3,4])

let res=new Set([...a,...b])
console.log(res);//Set(4) { 1, 2, 3, 4 }

👉 交集

res = new Set(
    [...a].filter(v => b.has(v))
)
console.log(res);//Set(2) { 2, 3 }

👉 差集

//a与b的差值,返回a中有b种没有的元素
res = new Set(
    [...a].filter(v => !b.has(v))
)
console.log(res);//Set(1) { 1 }

Weakset类型

1. 属性

没有size属性,其他set中的属性都有

2. 遍历

由于没有size属性,因此是无法遍历的

3. 赋值

注意: Weakset中只能保存对象等引用类型的数据,无法保存Number等类型

let b=new WeakSet([{name:'jqf'},{name:'fin'}])
console.log(b);//WeakSet {{…}, {…}}

let a=new WeakSet([1,2,3,4])
console.log(a);//Uncaught TypeError: Invalid value used in weak set

4.用途

可以专门用来保存DOM元素等…

Archai
Built with Hugo
Theme Stack designed by Jimmy