求数组的交集

function intersect(nums1,nums2){

    nums1.sort(function(a,b){

        if(a>b){

            return 1

        }else{

            return -1

        }

    })

    nums2.sort(function(a,b){

        if(a>b){

            return 1

        }else{

            return -1

        }

    })  //首先对两个数组进行排序

    let left=right=0; //设立两个指针

    let arry=[]

    while(left<=nums1.length && right<=nums2.length){

        if(nums1[left]==nums2[right]){  

            arry.push(nums1[left])   //如果两个指针的所指的值相同,就把它放入数组中

            left+=1  // 同时两个指针同时向后移一位

            right+=1

        }else{

            if(nums1[left]<nums2[right]){   //如果指针指向nums1中的元素小于nums2中的元素

                left+=1  //则left指针向后移,反之右指针向后移

            }else{

                right+=1

            }

        }

    }

    return arry

}

result=intersect([2,5,6,9,7,3],[2,6,7,3,1])

console.log(result)

### JavaScript 实现数组交集的方法 JavaScript 提供了多种方式来实现两个数组交集。以下是一些常用方法,包括使用原生 JavaScript 和库(如 `lodash`)的方式。 #### 使用原生 JavaScript 实现 1. **使用 `filter()` 和 `includes()` 方法** 这是一种简单且直观的方法,通过过滤第一个数组中的元素,并检查这些元素是否存在于第二个数组中。 ```javascript function intersection(arr1, arr2) { return arr1.filter(value => arr2.includes(value)); } ``` 此方法适用于小型数组,但在处理大型数组时性能可能不佳,因为 `includes()` 是一个线性时间操作。 2. **使用 `Set` 对象优化性能** 如果需要提高性能,可以将其中一个数组转换为 `Set`,从而利用 `Set` 的常数时间查找特性。 ```javascript function optimizedIntersection(arr1, arr2) { const set = new Set(arr2); return arr1.filter(value => set.has(value)); } ``` 该方法在处理大数据量时效率更高,因为 `Set.prototype.has()` 的时间复杂度为 O(1)[^2]。 3. **使用关联数组(对象)实现交集** 这种方法通过创建两个对象来记录每个数组中的元素,然后遍历其中一个对象以找出两个对象共有的键。 ```javascript function intersect(a, b) { var d1 = {}; var d2 = {}; var results = []; for (var i = 0; i < a.length; i++) { d1[a[i]] = true; } for (var j = 0; j < b.length; j++) { d2[b[j]] = true; } for (var k in d1) { if (d2[k]) results.push(k); } return results; } ``` 这种方法的优点是可以避免重复元素的问题,但需要注意的是,所有元素都会被转换为字符串形式存储[^1]。 #### 使用第三方库实现 1. **使用 Lodash 的 `_.intersection()` 方法** Lodash 是一个流行的 JavaScript 实用工具库,它提供了 `_.intersection()` 方法用于计算两个或多个数组交集。 ```javascript let results = _.intersection(["null", "", "undefined", 3], [3, "null", ""]); console.log(results); // 输出: ["null", "", 3] ``` 这种方法简洁且易于使用,同时支持更复杂的场景和多数组交集计算[^3]。 --- ### 总结 不同的方法适用于不同场景。如果关注性能和现代浏览器支持,推荐使用 `Set` 来优化交集计算。对于需要兼容旧环境或简化开发的情况,可以考虑使用 `filter()` 和 `includes()` 组合。而如果项目中已经引入了 Lodash,则可以直接调用其提供的方法来实现交集操作。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值