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

การใช้ Recursion ลบสมาชิกซ้ำติดกันในอาร์เรย์ - JavaScript

ลบสมาชิกที่ซ้ำติดกัน (consecutive duplicates) ในอาร์เรย์แบบ in-place ด้วย recursion

ตัวอย่าง

Input: [17, 17, 17, 12, 12, 354, 354, 1, 1, 1]
Output: [17, 12, 354, 1]

ตัวอย่างโค้ด

const arr = [17, 17, 17, 12, 12, 354, 354, 1, 1, 1];

const comp = (arr, len = 0, deletable = false) => {
  if (len < arr.length) {
    if (deletable) {
      arr.splice(len, 1);
      len--; // ปรับ index เพราะ array สั้นลง
    }
    // deletable = true ถ้าตัวถัดไปเท่ากับตัวปัจจุบัน
    return comp(arr, len + 1, arr[len] === arr[len + 1]);
  }
  return;
};

comp(arr);
console.log(arr);

การทำงาน

  • len = index ปัจจุบัน
  • deletable = flag ว่าตัวปัจจุบันซ้ำกับตัวก่อนหรือไม่
  • ถ้า deletable → splice ลบตัวปัจจุบัน และ len-- ชดเชย
  • ส่ง arr[len] === arr[len+1] เป็น deletable สำหรับรอบถัดไป

ผลลัพธ์

[ 17, 12, 354, 1 ]

ข้อควรระวัง: Recursion depth = array length อาจ stack overflow กับอาร์เรย์ใหญ่