ES6(Set集合和WeakSet)

Set集合

Set集合:是一种数据结构,结构类似于数组,且没有重复的值。主要用于数组去重,字符串去重。

注意:set是以value:value的格式存放数据。也是以键:值对的方式来存放数据,它比较特殊。它的值就是键键就是值

1.操作方法

(1)add()

add():添加值,返回值是Set结构本身。

let set = new Set();

//(1)add():添加值,返回Set结构本身

//1、一个一个添加数据

set.add(1);
set.add(2);
set.add(3);

//2、一起添加数据

set.add(1).add(2).add(2).add(3);

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

//注意:扩展运算符(...)(解构)可以将Set扩展出来
console.log(...set);    //1 2 3

console.log([...set]);    //将set转换为数组的方式输出

console.log(set.add(1));    //Set { 1, 2, 3 }    表示返回值是set结构本身

(2)delete()

delate():删除值,并返回一个boolean来表示删除是否成功。

let set = new Set();

set.add(1).add(2).add(3);

console.log(set);    //输出结果为Set { 1, 2, 3 }

let flag1 = set.delete(2);
let flag2 = set.delete(5);

console.log(set);    //输出结果为Set { 1, 3 }
console.log(flag1);    //输出结果为true,表示删除成功
console.log(flag2);    //输出结果为false,表示删除失败

(3)has()

has():判断某个值是否在集合中,并返回一个Boolean。

let set = new Set();

set.add(1).add(2);

let a = set.has(1);
let b = set.has(3);

console.log(a);    //结果为true,表示set集合中含有1
console.log(b);    //结果为false,表示set集合中不含3

(4)clear()

clear():清除所有值,且没有返回值。

let set = new Set();

set.add(1).add(2).add(3);

console.log(set);    //输出结果为Set { 1, 2, 3 }

set.clear();

console.log(set);    //输出结果为Set{}

2.遍历方法

(1)键、值相同

由于Set只有键值没有键名,也可以说键和值是同一个(键、值相同,可以忽略),所以keys和values返回值相同。

let set = new Set();

set.add(1).add(2).add(3);

for (const key of set.keys()) {    //keys()返回集合的所有键(key)
    console.log(key);
}

for (const val of set.values()) {    //values返回结合中所有的键(ket)对应的值(value)
    console.log(val);
}

(2)forEach()

let set = new Set();

set.add("张三").add("李四");

set.forEach(function(key,value){
    console.log(`${key}:${value}`);
})

输出结果如下:
在这里插入图片描述

(3)Set可以接受一个数组作为参数

let arr = ["张三","李四","王五","赵六"];

console.log(arr);

let set = new Set(arr);

console.log(set);

console.log(...set);

输出结果依次如下:

在这里插入图片描述

(4)Set实现并集和交集

let a = [1,2,3];
let b = [2,3,4];

let setA = new Set(a);
let setB = new Set(b);

let bj = new Set([...setA,...setB]);    //并集

console.log(bj);    //输出结果为Set { 1, 2, 3, 4 }

let jj = new Set([...setA].filter(function(val){    //交集
    return setB.has(val);
}))

console.log(jj);

输出结果如下:

在这里插入图片描述

WeakSet

WeakSet:只能是对象的集合,而不能是任何其他类型的任意值。WeakSet集合中对象的引用为弱引用。即如果WeakSet中的对象没有被另外引用,那么这些对象会被当作垃圾回收掉。

这也意味着WeakSet中没有存储当前对象的列表。这因为这样,WeakSet中对对象的引用不会被考虑进垃圾回收机制,即只要没有其他的对象引用该对象,该对象就会被回收,而不管它是否在WeakSet中。

let wset = new WeakSet();

let obj = {
    name: "小强",
    age: 12
}

wset.add(obj);
 
console.log(wset);    //输出结果为:WeakSet { [items unknown] }

(1)WeakSet支持add,has和delete方法,但不支持size和keys(),并且不可迭代。

let wset = new WeakSet();

let jack = {
    name: "javk"
}

wset.add(jack,20);

console.log(wset);    //输出结果为:WeakSet { [items unknown] }

console.log(wset.has(jack));    //输出结果为:true

wset.delete(jack);

console.log(wset.has(jack));    //输出结果为:false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值