JavaScript求数组的交集和差集-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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))

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: JavaScriptJava

“JavaScript求数组的交集和差集-CSDN博客” 的相关文章