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}
复制代码
去重
let arr = [1, 1, 2, 2, 3, 3]
let arr2 = [...new Set(arr)] // [1, 2, 3]
复制代码
const mySet = new Set([1, 2, 3, 4, 5])
mySet.has(1) // true
复制代码
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)) )
复制代码
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)) )
复制代码
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都是同样的
复制代码
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:markdown
给定两个数组,编写一个函数来计算它们的交集。数据结构
示例 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)
复制代码