ลบเอลีเมนต์ที่ซ้ำกันติดกัน (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 ไม่กระทบการวนลูป)