Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

ค้นหาจุดตัดของอาร์เรย์และรวมองค์ประกอบที่ซ้ำกันใน 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]