在JavaScript中查找数组交集并包含重复元素
问题
我们需要编写一个JavaScript函数,该函数分别接收两个数组arr1和arr2作为第一个和第二个参数。
该函数应该查找数组的交集(两个数组之间的公共元素),如果在两个数组中都出现两次的元素,我们也应该在结果数组中包含它们两次。
例如,如果函数的输入为:
const arr1 = [2, 7, 4, 6, 7, 4]; const arr2 = [7, 1, 9, 7, 4, 5];
那么输出应该为:
const output= [7, 7, 4];
示例
代码如下:
const arr1 = [2, 7, 4, 6, 7, 4];
const arr2 = [7, 1, 9, 7, 4, 5];
const intersect = (arr1 = [], arr2 = []) => {
const map = {};
arr1.forEach(a => {
map[a] = map[a] ? map[a] + 1 : 1;
})
const result = [];
for(let key of arr2) {
if(key in map && map[key] > 0) {
result.push(key);
map[key]--;
}
}
return result;
};
console.log(intersect(arr1, arr2));代码解释
我们采取的步骤是:
循环遍历第一个数组 (arr1) 以查找每个数字出现的次数。
循环遍历第二个数组 (arr2) 以查找arr2中的元素是否存在于映射后的arr1中。
如果存在,则减少映射后的num1中的值,并将元素推入结果数组。
输出
控制台输出将为:
[7, 7, 4]
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP