两个数组的交集 你能想出多少种方法

数组 专栏收录该内容
1 篇文章 0 订阅

​看到标题可能最先想到的方法就是for循环了,没错for循环是一种方法。

var intersection = function (nums1, nums2) {
      var arr = [];
   for (var i = 0; i< nums1.length;i++){
         	  if(nums2.indexOf(nums1[i]) > -1 && arr.indexOf(nums1[i]) === -1){
                arr.push(nums1[i]);
        }
    }
      return arr;
    };

除了for循环还有别的方法吗?当然有,下面让我们一起来探索吧~

利用while循环

 var intersection = function (nums1, nums2) {
   var i = 0;
        var arr = [];
        while(i< nums1.length){
            if(nums2.indexOf(nums1[i]) > -1 && arr.indexOf(nums1[i]) === -1){
                arr.push(nums1[i])
            }
             i++;
        }  
        return arr;
    };

利用new Set()将数组转化为对象

var intersection = function(nums1, nums2) {
    var hash1 = new Set(nums1);
    var hash2 = new Set(nums2); // 去重、转化成{value, value1}的形式 如:new Set([1,2,1]) ---> {1,2}
    var res=[];
    for(var i of hash1){
        if(hash2.has(i)){
            res.push(i);
        }
    }
    return res;
};

利用filter查找

var intersection = function(nums1, nums2) {
    var hash1 = new Set(nums1);
    return nums2.filter(function(num,index,self){
           // indexOf 会返回在数组中找到符合的第一个元素的位置,因此会过滤重复元素
            return hash1.has(num)&&(self.indexOf(num)==index);
        });
};

同理可

var intersection = function(nums1, nums2) {
    //数组交集
    let intersect = nums1.filter(x => nums2.includes(x));
    //数组去重
    return [... new Set(intersect)];
};

以上便是我整理的关于求两数组的交集的方法,大家有什么意见可以提出来

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值