集合
大约 1 分钟约 401 字
简介
一种无序且唯一的数据结构
ES6
中有集合,名为Set
集合的常用操作:去重、判断某元素是否在集合中、求交集
// 去重
const arr = [1, 1, 1]
const arr1 = [...new Set(arr)]
console.log(arr1) // [1]
// 判断某元素是否在集合中
const set = new Set([1, 2])
const has = set.has(1)
console.log(has) // true
// 求交集
const set2 = new Set([3, 4, 1])
const set3 = new Set([...set].filter((item) => set2.has(item)))
console.log(set3) // Set { 1 }
LeetCode:349. 两个数组的交集
[349. 两个数组的交集](https://leetcode-cn.com/problems/intersection-of-two-arrays/)
- 解题思路
求交集且无序唯一,使用集合
- 解题步骤
用集合对 nums1 去重,然后遍历 nums1,筛选出 nums2 也包含的值
/*
* @lc app=leetcode.cn id=349 lang=javascript
*
* [349] 两个数组的交集
*/
// @lc code=start
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function (nums1, nums2) {
// 集合
// return [...new Set(nums1)].filter((item) => {
// return nums2.includes(item)
// })
// 字典
let m = new Map()
nums1.forEach((item) => {
m.set(item, true)
})
let res = []
nums2.forEach((item) => {
if (m.get(item)) {
res.push(item)
m.delete(item)
}
})
return res
}
// @lc code=end
前端与集合:使用 ES6 中 Set
使用 Set 对象:new
、add
、delete
、has
、size
迭代 Set:多种迭代方法(for...of)、Set 与 Array 互转、求交集/差集
Set,Array 互转
- Set=>Array
const arr1 = [...new Set([1, 2, 3, 4, 1])]
const arr2 = Array.form(new Set[(1, 2, 3, 4, 1)]())
- Array=>Set
const set = new Set([1, 23, 1, 3])
交集/差集
const set1 = new Set([1, 23, 1])
const set2 = new Set([23])
// 交集
const newSet = new Set(
[...set1].filter((item) => {
return set2.has(item)
})
)
// 差集
const newSet2 = new Set(
[...set1].filter((item) => {
return !set2.has(item)
})
)