四、集合_JavaScript数据结构与算法

集合

  • 一种 无序且唯一 的数据结构
  • ES6 中有集合,名为 Set
  • 集合的常用操作:去重、判断某元素是否在集合中、求交集
// 去重
const arr = [1, 1, 2, 2]
const arr2 = [...new Set(arr)]

// 判断元素是否在集合中
const set = new Set(arr)
const has = set.has(1)

// 求交集
const set2 = new Set([2, 3])
const set3 = new Set([...set].filter(item => set2.has(item)))

349. 两个数组的交集

349. 两个数组的交集

输入输出

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

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

题解

  • 求交集且无序唯一,可以使用集合(这样时间会长些),也可以使用数组原生方法(includes
var intersection = function (nums1, nums2) {
  return [...new Set(nums1)].filter(n => nums2.includes(n))
}

复杂度:

  • 时间复杂度:O(m * n)
  • 空间复杂度:O(m)m 为去重后的数组长度

使用 ES6 的 Set

  • 使用 Set 对象:newadddeletehassize
  • 迭代 Set:多种迭代方法、Set 与 Array 互转、求交集/差集
let mySet = new Set()
// 使用Set对象
mySet.add(1)
mySet.add(5)
mySet.add(5)
let o = { a: 1, b: 2 }
mySet.add(o)
mySet.add({ a: 1, b: 2 })
const has = mySet.has(1)
mySet.delete(5)

// Set迭代
for (let key of mySet.keys()) {
  console.log(key)
}
for (let [key, value] of mySet.entries()) {
  console.log(key, value)
}

// Set与Array互转
const myArr1 = [...mySet]
const myArr2 = Array.from(mySet)
const mySet2 = new Set([1, 2, 3, 4])

// 求交集
const intersection = new Set([...mySet].filter(x => mySet2.has(x)))
// 求差集
const difference = new Set([...mySet].filter(x => !mySet2.has(x)))

数据库内连接

  • INNER JOIN

inner-join

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值