1. Set是类似数组的一种数据结构,不同点在于Set中没有重复的值
  2. Set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。另外,NaNundefined都可以被存储在Set 中, NaN之间被视为相同的值(NaN被认为是相同的,尽管 NaN !== NaN

1- 创建Set对象

const s = new Set()

//可以接受一个数组作为参数
const s = new Set([1,2,3,4])

2- size属性

// 代表当前数据结构中包含了多少值
const s = new Set([1,2,3,4])
console.log(s.size)     // 4

3- 添加元素 add

const s = new Set()
s.add(1)  // 添加元素
s.add(2)
s.add(2)
console.log(s.size) // 2
console.log(s) // {1,2}

4- 移除元素 delete

const s = new Set()
s.add(1)
s.add(2)
s.delete(2) // 删除元素
console.log(s) // {1}

5- 判断是否含有指定元素 has( )

const s = new Set()
s.add(1) 
s.add(2)
console.log(s.has(2)) // true
s.delete(2) 
console.log(s.has(2)) // false

6- 清除所有成员 clear( )

// 清除set结构中的所有值,没有返回值
s.clear()

7- 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
}

8- 遍历 for of

for(let item of set){
  console.log(item)
}

9- forEach

const s = new Set(['a','b','c'])
s.forEach(value=>{
  console.log(value)
})

10- 并集,交集,差集

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]