JavaScript求数组的交集和差集

1. 求交集(从2个数组中找到相同的元素, 组成新数组, 注意去重):

1) Set+filter+includes

// 求交集:
const arr1 = [0, 1, 2]
const arr2 = [3, 2, 0]
function intersectSet(arr1, arr2) {
    return [...new Set(arr1)].filter(item=>arr2.includes(item))
}
const values = intersectSet(arr1, arr2)
console.log(values, ':values') // [0, 2]

2)Map+forEach+filter

// 求交集
// 引用类型
function intersect(arr1, arr2, key) {
    const map = new Map()
    arr1.forEach(val => map.set(val[key], val[key]))// map.set第二个参数不传相当于传了undefined
    console.log(map, ':map====')
    return arr2.filter(val => map.has(val[key]))
}
// 原始数据类型:
function intersectBase(arr1, arr2) {
    const map = new Map()
    arr1.forEach(val => map.set(val, val))// map.set第二个参数不传相当于传了undefined
    console.log(map, ':map====')
    return arr2.filter(val => map.has(val))
}

注意事项: 大量数据时, includes查找太耗性能, 如果已经有Set和Map存下的数据, 使用has方法查找性能会稍好一点

2. 求差集

很简单, 和上面的求交集的做相反的判断就行了

// 求差集---
// 引用类型
function difference(arr1, arr2, key) {
    const map = new Map()
    arr1.forEach(val => map.set(val[key], val[key]))// map.set第二个参数不传相当于传了undefined
    console.log(map, ':map====')
    return arr2.filter(val => !map.has(val[key]))
}
// 原始数据类型:
function differenceBase(arr1, arr2) {
    const map = new Map()
    arr1.forEach(val => map.set(val, val))// map.set第二个参数不传相当于传了undefined
    console.log(map, ':map====')
    return arr2.filter(val => !map.has(val))
}
const  a1 = [{p:0},{p:1},{p:2}]
const  a2 = [{p:3},{p:2},{p:1}]
console.log(difference(a1, a2, 'p'))
const arr1 = [0, 1, 2]
const arr2 = [3, 2, 0]
console.log(differenceBase(arr1, arr2))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值