Set

  1. ES6 提供了新的数据结构 `Set` ,它类似与 **数组**,但成员的值都是**唯一**的,集合实现了 `iterator` 接口,所以可以使用 `...(拓展运算符)` `for...of` 进行遍历,集合的属性和方法:
  • size:返回集合的元素个数
  • add:增加一个新元素,返回当前集合
  • delete:删除元素,返回 boolean
  • has:检测集合中是否包含某个元素,返回 boolean

方法:
  1. / 声明一个 Set
  2. let s = new Set()
  3. let s2 = new Set(['大事儿','小事儿','好事儿','坏事儿','小事儿'])
  4. console.log(s, Object.prototype.toString.call(s)) // Set(0) "[object Set]"
  5. console.log(s instanceof Object) // true
  6. console.log([...s2],typeof [...s2]) // (4) ["大事儿", "小事儿", "好事儿", "坏事儿"] "object"
  7. // 自动去重
  8. console.log(s2) // Set(4) {"大事儿", "小事儿", "好事儿", "坏事儿"}
  9. // 元素个数
  10. // console.log(s2.size) // 4
  11. // 添加新的元素
  12. // s2.add('喜事儿')
  13. // console.log(s2) // Set(5) {"大事儿", "小事儿", "好事儿", "坏事儿", "喜事儿"}
  14. // 删除元素
  15. // s2.delete('坏事儿')
  16. // console.log(s2) // Set(3) {"大事儿", "小事儿", "好事儿"}
  17. // 检测
  18. // console.log(s2.has('好事儿')) // true
  19. // console.log(s2.has('糟心事')) // false
  20. // console.log(s2)
  21. // 清空
  22. // s2.clear()
  23. // console.log(s2) // Set(0) {}
  24. for(let v of s2) {
  25. console.log(v) // 遍历
  26. }

应用:
  1. let arr = [1,2,3,4,5,4,3,2,1]
  2. // 1.数组去重
  3. let result1 = [...new Set(arr)] // 因为 Set 集合实现了 iterator 接口,所以可以直接使用拓展运算符来使用遍历
  4. console.log(result1) // (5) [1, 2, 3, 4, 5]
  5. // 2.交集
  6. let arr2 = [4,5,6,5,6]
  7. let s2 = new Set(arr2)
  8. console.log(s2) // Set(3) {4, 5, 6}
  9. console.log([...new Set(arr2)],Object.prototype.toString.call([...new Set(arr2)])) // (3) [4, 5, 6] "[object Array]"
  10. let result2 = [...new Set(arr)].filter(item => s2.has(item))
  11. console.log(result2) // (2) [4, 5]
  12. // 3.并集
  13. let union = [...new Set([...arr, ...arr2])]
  14. console.log(union) // (6) [1, 2, 3, 4, 5, 6]
  15. // 4.差集
  16. let diff = [...new Set(arr)].filter(item => !s2.has(item))
  17. console.log(diff) // (3) [1, 2, 3]