ES6 集合(Set) | 8月更文挑战

108 阅读2分钟

ES6的 Set 你了解过吗? Set 是一组Key的集合,它不存储value。但是它的Key不能重复。总结起来就是一种无序且唯一的数据结构。

  • Set对象方法: new、 add、 delete、 has、 size
  • 迭代Set: Set与Array互转、求交集、差集等

let setKeys = new Set([1, 2, 3, 3]) // Set{1, 2, 3}

setKeys.add(3) // Set{1, 2, 3}

setKeys.delete(3) // Set{1, 2}

1. 利用集合的这种特性,我们可以进行数组去重

let arr = [1, 1, 2, 2, 3, 3]

let arr2 = [...new Set(arr)] // [1, 2, 3]

2. 判断元素是否在集合中

const mySet = new Set([1, 2, 3, 4, 5])

mySet.has(1) // true

3. 求交集


const s = new Set(1, 1, 2, 3, 4, 5)

const s2 = new Set([2, 3])

// 先将s转换成数组, 通过数组的方法来筛选
const s3 = new Set( [...s].filter(n => s2.has(n)) )

4. 求差集


const s = new Set(1, 1, 2, 3)

const s2 = new Set([2, 3])

// 先将s转换成数组
const s3 = new Set( [...s].filter(n => !s2.has(n)) )

5. 迭代Set:

let mySet = new Set([1, 'text', {a:1} ])

for (let item of mySet) console.log(item) // 1, 'text', {a:1}

for (let item of mySet.values()) console.log(item) // 1, 'text', {a:1}

for (let item of mySet.keys()) console.log(item) // 1, 'text', {a:1}

for (let [key, value] of mySet.entries()) console.log(key, value)

// 1  1
// 'text' 'text'
// {a:1} {a:1}

可以看到:Set数据结构key 和 value都是一样的

6. Set 与 Array 互转

Set ==> Array

let mySet = new Set([1, 2, 3])

 [...mySet]
 Array.from(mySet)
 
 Array ==> Set
 
 let arr = [1, 2, 3]
 
 new Set(arr)

来看一道LeetCode题-349

给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]

**说明:**

-   输出结果中的每个元素一定是唯一的。
-   我们可以不考虑输出结果的顺序。
/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersection = function(nums1, nums2) {
    return [...new Set(nums1)].filter(n => nums2.includes(n))
}

时间复杂度O(n^2)
空间复杂度O(m)