在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]

更新于:2021年3月19日

1K+ 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.