สมมติว่าเรามีอาร์เรย์ของตัวเลขที่มีรายการซ้ำติดกันบางส่วนอย่างนี้:
const testArr = [1, 1, 2, 2, 3, 3, 1, 1, 1];
เราต้องเขียนฟังก์ชัน compress ที่รับอาร์เรย์นี้และลบรายการซ้ำติดกันทั้งหมดแบบ in-place ให้ผลลัพธ์เป็นแบบนี้:
const output = [1, 2, 3, 1];
มาเขียนโค้ดสำหรับฟังก์ชันนี้ เราจะใช้ recursion และโค้ดจะเป็นดังนี้:
ตัวอย่างโค้ด
const testArr = [1, 1, 2, 2, 3, 3, 1, 1, 1];
const compress = (arr, len = 0, canDelete = false) => {
if (len < arr.length) {
if (canDelete) {
arr.splice(len, 1);
len--;
}
return compress(arr, len + 1, arr[len] === arr[len + 1]);
}
return;
};
compress(testArr);
console.log(testArr);
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้:
[ 1, 2, 3, 1 ]