Set是类似数组的一种数据结构,不同点在于Set中没有重复的值Set对象是值的集合,你可以按照插入的顺序迭代它的元素。Set中的元素只会出现一次,即 Set 中的元素是唯一的。另外,NaN和undefined都可以被存储在Set 中, NaN之间被视为相同的值(NaN被认为是相同的,尽管 NaN !== NaN)
创建Set对象
const s = new Set()//可以接受一个数组作为参数const s = new Set([1,2,3,4])
size属性
// 代表当前数据结构中包含了多少值const s = new Set([1,2,3,4])console.log(s.size) // 4
添加元素add
const s = new Set()s.add(1) // 添加元素s.add(2)s.add(2)console.log(s.size) // 2console.log(s) // {1,2}
移除元素delete
const s = new Set()s.add(1)s.add(2)s.delete(2) // 删除元素console.log(s) // {1}
判断是否含有指定元素has()
const s = new Set()s.add(1) s.add(2)console.log(s.has(2)) // trues.delete(2) console.log(s.has(2)) // false
清除所有成员clear()
// 清除set结构中的所有值,没有返回值s.clear()
keys() values()
// set中的键值和键名相同const s = new Set([1,2,3,4,5])for(let key of s.keys()){ console.log(key) // 1 2 3 4 5}for(let value of s.values()){ console.log(value) // 1 2 3 4 5}
遍历 for of
for(let item of set){ console.log(item)}
forEach
const s = new Set(['a','b','c'])s.forEach(value=>{ console.log(value)})
并集,交集,差集
let a = new Set([1,2,3])let b = new Set([4,3,2])// 并集let union = new Set([...a,...b])console.log(union) // {1,2,3,4}// 交集let intersect = new Set([...a].filter(x=>b.has(x)))console.log(intersect); // {2,3}// 差集let diff = new Set([...a].filter(x=>!b.has(x)))console.log(diff); // {1}
练习 数组去重
const items = new Set([1,2,2,3,4,5])const arr = Array.from(items)console.log(arr)const s = new Set([1,2,1,3,4,5])console.log(s) // {1,2,3,4,5}console.log([...s]) // [1,2,3,4,5]