Set和WeakSet

ES6之前的数据集合主要是数组和对象,ES6补充的新数据结构Set、WeakSet、Map、WeakMap

Set

1、Set的基本使用

set 类似以数组,主要区别是有自己的方法,并且内部集合不能重复

let typeSet = new Set([1,2,3,4,6]);
typeSet.add(8);
typeSet.add("a");
typeSet.add(true);
console.log(typeSet)

返回的结果是一个set集合,和数组对象都不一样,是一个新的数据集合

设置初始值的方法有两种,第一中是通过add()方法进行设置的,第二种就是初始化的时候内部设置数组

如果我们想要使用初始化赋值的状态,赋值必须是数组,不可以是对象等等

set内部的值不能重复

    let typeSet = new Set([1,2,3,4,6,2,1]);
    typeSet.add(8);
    typeSet.add("a");
    typeSet.add(true);
    console.log(typeSet)

set可打点调用 add方法

    let typeSet = new Set([1,2,3,4,6,2,1]);
    typeSet.add(8);
    typeSet.add("a").add("b").add("c");
    console.log(typeSet)

2、set的方法

2.1 add() 插入值

let typeSet = new Set();
typeSet.add(8);
typeSet.add("a").add("b").add("c");
console.log(typeSet)

2.2 delete() 删除

let typeSet = new Set([1,2,3,5,6,"a","v","c"]);
typeSet.delete(1);
console.log(typeSet)

2.3 has() 检测内部是否含有该值  返回布尔值

let typeSet = new Set([1,2,3,5,6,"a","v","c"]);
console.log(typeSet.has(1))  /   true

2.4 size 属性 判断集合的长度

let typeSet = new Set([1,2,3,5,6,"a","v","c"]);
console.log(typeSet.size) ///8

2.5 clear() 清空内部所有的数据

let typeSet = new Set([1,2,3,5,6,"a","v","c"]);
typeSet.clear()
console.log(typeSet)

3、set 循环

map 和 set  都是iterator 接口机制,所以可以使用  for....of  进行遍历

3.1 for...of 

let typeSet = new Set([1,2,3,5,6,"a","v","c"]);
for(let item of typeSet){
    console.log(item)
}

使用 keys 和  values 遍历

    let typeSet = new Set([1,2,3,"c"]);
    for(let item of typeSet.keys()){
        console.log(item)
    }
let typeSet = new Set([1,2,3,"c"]);
for(let item of typeSet.values()){
    console.log(item)
}

通过上面发现set结合的key和value是相同的

3.2 forEach 遍历

let typeSet = new Set([1,2,3,"c"]);
typeSet.forEach((item,index) => {
    console.log(item,index)
})

forEach 遍历 item 和 index 也是相同的

3.3 entries 遍历

let typeSet = new Set([1,2,3,"c"]);
for(let item of typeSet.entries()){
    console.log(item)
}

4、set 转换为数组

由于set不能使用数组的方法,虽然forEach可以用,但是仅仅是forEach方法,其他是不可以的,比如map、filter

所以如果想操作set中的数据,需要将set转换为数组

…  扩展运算符是有iterator接口机制,所以set就可以使用运算符

 let typeSet = new Set([1,2,3,"c"]);
 console.log([...typeSet])

 

小案例:将数组中  数 * 2

let typeSet = new Set([1,2,3,6,8]);
let arr = [...typeSet];
let arr2 = arr.map(item => {
    return item * 2
})
console.log(new Set(arr2))

小案例:数组去重

let typeSet = new Set([1,2,3,6,8,1,2,1,3]);
    let arr = [...typeSet];
    let arr2 = new Set(arr)
    console.log(arr2);

WeakSet

1、介绍

Set和WeakSet的区别是set内部建议存放数组,WeakSet内部建议存放引用类型(数组和对象)

虽然WeakSet内部建议存放对象,但是WeakSet初始化的时候也不能进行初始化赋值,必须使用add赋值

set内部存放对象

let typeSet = new Set();
typeSet.add({
    'a':1,
    'b':2
})
console.log(typeSet);

WeakSet内部存放对象

let typeSet = new WeakSet();
typeSet.add({
    'a':1,
    'b':2
})
console.log(typeSet);

WeakSet是使用add方法进行的赋值,如果使用初始化赋值会报错

2、WeakSet 方法

WeakSet也是用add进行赋值的,但是内部接收的是引用类性质,不能是基本类型值

注意:WeakSet没有size属性,也没有clear方法,也不能使用for..of进行遍历

 

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值