js算法----数组交集

数组交集

要求:
给定两个数组,要求求出两个数组的交集,注意,交集中的元素应该是唯一的。
求出两个数组的交集,例如arr1 = [2,4,0,1] arr2 = [2,2,1,3]
最终求出的交集为arr3 = [1,2]

思路:
利用hashmap的特性,首先利用第一个数组通过foreach循环遍历创建一个hashmap,
这个hashmap的键就是这个数组的元素,值我们规定为1。然后再循环遍历第二个数组,
看一看第二个数组中的元素在hashmap中的值是否为1,如果为1,就将其添加到新数组。

const arr1 = [2,4,0,1];
const arr2 = [2,2,1,3];
let arr3 = []; //用来接收交集
let hashmap = {
    
    }; //定义一个hashmap对象

//将arr1数组中的每个元素作为hashmap的键,规定hashmap的值为1,
arr1.forEach(function(element){
    
    
	hashmap[element] = 1; 
})
console.log(hashmap); //{0:1,1:1,2:1,4:1}

arr2.forEach(function(element){
    
    
	if(hashmap[element] === 1){
    
    
		arr3.push(element);
		hashmap[element]++; //设置计数器跟踪我们已添加的内容
		/*
		 举个例子,这里可能不是很好理解 
		 例如遍历arr2的时候,第一个数为2,有hashmap可知,键为2的值是1,所以我们就可以把2加入arr3,他是一个交集
		 但是下一个数字还是2,如果没有hashmap[element]++; 这句话,那么这个2毫无疑问也会添加到arr3
		 所以有了它hashmap[element]++;使得键为2的值是2,所以第二个数字2的值也为2,所以就不等于1,所以就不添加至arr3
		 */
	}
})

console.log(arr3); //[2,1]

在这里插入图片描述
参考至https://mp.weixin.qq.com/s/cS7yiYr0tqKjToK-msyLOQ

猜你喜欢

转载自blog.csdn.net/qq_41880073/article/details/116265832