查找数组交集并在 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)以查找每个编号的出现。在里面。
循环遍历第二个数组(arr12)以查找arr2中的元素是否存在于映射的arr1中。
如果存在,则减少映射的num1中的值并将元素推送到结果数组中。
输出结果
控制台中的输出将是-
[7, 7, 4]