(一)ES5新增的set可以理解成一种数据结构,也可以理解成一种值的集合,set结构中的数据是不允许有重复值的,set本身是一个构造函数,可以理解成一个类,使用的时候需要实例化,
写法如下:
let s = new set([1,2,3])
console.log(a)
//打印结果:{1,2,3}
或者:
let s = new set()
s.add(1)
s.add(2)
s.add(3)
console.log(s)
//打印结果:{1,2,3}
1. set的属性 size:
let s = new set([1,2,3])
s.size //值为4
2.set的方法 delete(),clear(),has(),entries(),keys(),values(),forEach()
//删除set结构中的指定值
let a = new Set([1,2,3,4])
console.log( a.delete(1) )
console.log(a)
//打印结果:true
//打印结果:{2,3,4}
//清除set结构中的所有值
let b = new Set([1,2,3,4])
b.clear()
console.log(b)
//打印结果为{}
//判断set结构中是否含有指定值
let c = new Set([1,2,3,4])
console.log( c.has(1) )
//打印结果为 true
//返回一个带键值对的遍历器
let d = new Set(['a','b','c'])
console.log( d.entires() )
//打印结果是一个带键值对的遍历器,键值相同:SetIterator {["a", "a"], ["b", "b"], ["c", "c"]}
//返回键名的遍历器
let e = new Set(['a','b','c'])
console.log(e.keys())
//打印结果:SetIterator{'a','b','c'}
//返回键值的遍历器
let f = new Set(['a','b','c'])
console.log(f.values())
//打印结果:SetIterator{'a','b','c'}
//遍历每一个成员
let g = new Set(['a','b','c'])
g.forEach((key,value) => {
console.log(key,value)
})
//打印结果:a,a b,b c,c
set有一个很受欢迎的用途,那就是数组去重:
let num = [1,2,2,3,3,4,5]
let s = new Set(num) //因为set结构中不允许有重复项,会自动忽略相同的值,只保留一项,所以set实例后的s的值为{1,2,3,4,5}
let newNum = Array.from(s) //ES6数组的扩展特性
console.log(newNum) //完成去重[1,2,3,4,5]
(二)WeakSet和Set有很多相同的地方,他们同样不能存储相同的项,不同的是WeakSet的参数的项必须是对象类型{age:'18'}
let s = new WeakSet([name:'张三',age:'18'])
WeakSet同样含有add(),has(),delete()方法,但是WeakSet不能循环遍历操作。