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

创建Set对象

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

size属性

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

添加元素add

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

移除元素delete

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

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

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

清除所有成员clear()

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

keys() values()

  1. // set中的键值和键名相同
  2. const s = new Set([1,2,3,4,5])
  3. for(let key of s.keys()){
  4. console.log(key) // 1 2 3 4 5
  5. }
  6. for(let value of s.values()){
  7. console.log(value) // 1 2 3 4 5
  8. }

遍历 for of

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

forEach

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

并集,交集,差集

  1. let a = new Set([1,2,3])
  2. let b = new Set([4,3,2])
  3. // 并集
  4. let union = new Set([...a,...b])
  5. console.log(union) // {1,2,3,4}
  6. // 交集
  7. let intersect = new Set([...a].filter(x=>b.has(x)))
  8. console.log(intersect); // {2,3}
  9. // 差集
  10. let diff = new Set([...a].filter(x=>!b.has(x)))
  11. console.log(diff); // {1}

练习 数组去重

  1. const items = new Set([1,2,2,3,4,5])
  2. const arr = Array.from(items)
  3. console.log(arr)
  4. const s = new Set([1,2,1,3,4,5])
  5. console.log(s) // {1,2,3,4,5}
  6. console.log([...s]) // [1,2,3,4,5]