Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

หา Intersection ของอาร์เรย์สองอาร์เรย์รวมค่าซ้ำ (Intersection with Duplicates) ใน JavaScript

ปัญหา

รับอาร์เรย์ arr1, arr2 หา intersection (ค่าที่ซ้ำ) หากค่าใดปรากฏ 2 ครั้งในทั้งสองอาร์เรย์ ให้รวม 2 ครั้งในผลลัพธ์

ตัวอย่าง

const arr1 = [2, 7, 4, 6, 7, 4]; const arr2 = [7, 1, 9, 7, 4, 5];

7 ปรากฏ 2 ครั้งใน arr1 และ 2 ครั้งใน arr2 → ใส่ 2 ครั้ง, 4 ปรากฏ 2 ครั้งใน arr1 และ 1 ครั้งใน arr2 → ใส่ 1 ครั้ง → ผลลัพธ์ [7, 7, 4]

โค้ดตัวอย่าง (Hash Map)

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] || 0) + 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 หากเจอใน map และยังมีจำนวน ให้ push และลดจำนวน

ผลลัพธ์

[7, 7, 4]