1.set的创建
1.1set和数组的差别在于不能有重复的数据,否则会覆盖掉,
而普通对象的键名不管是什么类型最后都会转为字符串
let set = new Set([1,1])
console.log(set) //Set(1) {1}
2.set的基本使用
2.1增加
一次只能添加一个
let set = new Set([1])
set.add(2,3,4,5)
console.log(set) //[1,2]
2.2获取元素数量
let set = new Set([1])
set.add(2,3,4,5)
console.log(set.size) //2
2.3检测某个元素是否存在
let set = new Set([1])
set.add(2,3,4,5)
console.log(set.has(10)) //false
2.4删除某个元素
删除成功返回true,失败返回false
let set = new Set([1])
set.add(2,3,4,5)
console.log(set.delete(2))//falsej
2.5清空
let set = new Set([1])
set.add(2,3,4,5)
console.log(set.clear(2))
3.类型转换
3.1通过将数组转为set来完成去重
let arr = [1,2,3,4,5,4,3,2,1]
let newArr = [...new Set(arr)]
console.log(newArr) //[1,2,3,4,5]
4.set遍历
4.1forEach
因为set是没有索引的,所以value和index是一样的
let set = new Set([1,2,3,4,5])
set.forEach(function(value,index,set){
console.log(value)
console.log(index)
console.log(set)
})
4.2 forof
let set = new Set([1,2,3,4,5])
for (const item of set) {
console.log(item) //1,2,3,4,5
}
5.使用set处理网站关键字
<input type="text" name="test">
<ul></ul>
<script>
let obj = {
data: new Set(),
keyword(word){
this.data.add(word)
},
show(){
let ul = document.querySelector('ul')
ul.innerHTML = ''
for (const item of this.data) {
ul.innerHTML += `<li>${item}</li>`
}
}
}
let input = document.querySelector("[name='test']")
input.addEventListener('blur', function(){
obj.keyword(this.value)
obj.show()
})
</script>
6.0 WeakSet的创建
WeakSet和Set类似,但里面存的只能是引用类型,而且是弱引用类型,就是当内存中的数据被删除了,WeakSet还会留着空壳,但没有数据。
由于是弱引用,所以想什么遍历之类的方法都不能使用。
let a = {name: '张三'}
let weak = new WeakSet()
weak.add(a)
console.log(weak)