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