在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