学习笔记 JavaScript ES6 Set

学习内容:

  • 常用方法
  • 遍历
  • 应用场景
  • WeakSet

一种新的数据结构

set和array数组很像,不过array中可以有重复的值,而set里的值是唯一的

let s = new Set()
console.log(s)

let s1 = new Set([1,2,3,2]) // 这里有重复的2,打印时变成了一个
console.log(s1)

------------------
Set(0) {size: 0}
Set(3) {1, 2, 3}

Set的常用方法

添加元素add()


let s1 = new Set([1,2,3,2])
s1.add('ABC')
s1.add('XYZ')
console.log(s1)

// 也可以写成链式操作
let s2 = new Set([1,2,3])
s2.add('666').add('777')
console.log(s2)

------------------------------
Set(5) {1, 2, 3, 'ABC', 'XYZ'}
Set(5) {1, 2, 3, '666', '777'}

删除元素delete()

let s2 = new Set([1,2,3])
s2.add('666').add('777')
s2.delete(2)

console.log(s2)

---------------------------
Set(4) {1, 3, '666', '777'}

清空操作clear()

let s2 = new Set([1,2,3])
s2.add('666').add('777')
s2.clear()

console.log(s2)

---------------------------
Set(0) {size: 0}

判断set中是否包含某个值has()

let s2 = new Set([1,2,3])
s2.add('666').add('777')

console.log(s2.has('666'))

---------------------------
true

set的长度,就是有几个值size,注意没有括号,数组是length别弄混了

let s2 = new Set([1,2,3])
s2.add('666').add('777')

console.log(s2.size)

------
5

遍历

forEach

let s2 = new Set([1,2,3])
s2.add('666').add('777')

s2.forEach(item => console.log(item))
---------------------------
1
2
3
666
777

for ( of ) { } 

let s2 = new Set([1,2,3])
s2.add('666').add('777')

for(let item of s2) {
    console.log(item)
}
---------------------------
1
2
3
666
777

for ( of .keys() ) {

let s2 = new Set([1,2,3])
s2.add('666').add('777')

for(let item of s2.keys()) {
    console.log(item)
}
---------------------------
1
2
3
666
777

for ( of .values() ) { }

let s2 = new Set([1,2,3])
s2.add('666').add('777')

for(let item of s2.values()) {
    console.log(item)
}
---------------------------
1
2
3
666
777

 for ( of .entries() ) { },又能输出key,又能输出value

let s2 = new Set([1,2,3])
s2.add('666').add('777')

for(let item of s2.entries()) {
    console.log(item)
}
---------------------------
(2) [1, 1]
(2) [2, 2]
(2) [3, 3]
(2) ['666', '666']
(2) ['777', '777']

应用场景 

对数组进行去重

let arr = [1,2,3,4,1,2,3]
let s = new Set(arr)

console.log(s)

----------------------
Set(4) {1, 2, 3, 4}

对数组进行合并去重后得到set

let arr1 = [1,2,3,4]
let arr2 = [2,3,4,5]
let s = new Set([...arr1,...arr2])

console.log(s)

----------------------
Set(5) {1, 2, 3, 4, 5}

对数组进行合并去重后得到数组

let arr1 = [1,2,3,4]
let arr2 = [2,3,4,5]
let s = new Set([...arr1,...arr2])

console.log([...s]) // 第一种方法转为数组
console.log(Array.from(s)) // 第二种方法转为数组

----------------------
(5) [1, 2, 3, 4, 5]
(5) [1, 2, 3, 4, 5]

取得两个数组的交集

let arr1 = [1,2,3,4]
let arr2 = [2,3,4,5]

let s1 = new Set(arr1)
let s2 = new Set(arr2)

// filter会返回一个符合条件的数组
let result = new Set(arr1.filter(item => s2.has(item))) // 通过has()方法实现
console.log(result)

---------------------
Set(3) {2, 3, 4}

取得两个数组的差集

let arr1 = [1,2,3,4]
let arr2 = [2,3,4,5]

let s1 = new Set(arr1)
let s2 = new Set(arr2)

let arr3 = new Set(arr1.filter(item => !s2.has(item)))
let arr4 = new Set(arr2.filter(item => !s1.has(item)))

console.log([...arr3,...arr4])

---------------------
(2) [1, 5]

WeakSet

weakset只能放对象,不能放数字或字符串。

weakset也有add、delete,用法和set一样,但是weakset不可以遍历,weakset中的对象都是弱引用,不会被GC。ES中的GC是一种计数的GC方式,对象被引用一次,计数+1,如果计数=0,GC才回收。

weakset用于临时存放一些对象,跟对象去绑定一些相关的信息。当对象被销毁后,weakset中的对象也被销毁。

Set和WeakSet的区别

  • weakset只能存放对象,不能存储数字或字符串
  • set可以遍历,weakset不可以遍历
  • weakset是弱引用,不会被GC
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值