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

ลบเอลีเมนต์ซ้ำติดกัน (Consecutive Duplicates) ด้วย Recursion - JavaScript

ลบเอลีเมนต์ที่ซ้ำกันติดกัน (Consecutive Duplicates) ในอาร์เรย์ แบบ In-place ใช้ Recursion

ตัวอย่าง

[17, 17, 17, 12, 12, 354, 354, 1, 1, 1]
→ [17, 12, 354, 1]

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

const comp = (arr, len = 0, deletable = false) => {
  if (len < arr.length) {
    if (deletable) {
      arr.splice(len, 1);
      len--;
    }
    return comp(arr, len + 1, arr[len] === arr[len + 1]);
  }
  return;
};

const arr = [17, 17, 17, 12, 12, 354, 354, 1, 1, 1];
comp(arr);
console.log(arr);

ผลลัพธ์

[ 17, 12, 354, 1 ]

วิธีแบบ Iterative (เข้าใจง่ายกว่า)

const removeConsecutiveDuplicates = arr => {
  for (let i = arr.length - 1; i > 0; i--) {
    if (arr[i] === arr[i - 1]) arr.splice(i, 1);
  }
  return arr;
};

ลูปจากท้ายมาหน้า ปลอดภัยกว่าเวลา splice (index ไม่กระทบการวนลูป)