看到标题可能最先想到的方法就是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)];
};
以上便是我整理的关于求两数组的交集的方法,大家有什么意见可以提出来