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

ลบองค์ประกอบซ้ำติดกันออกจากอาร์เรย์ด้วย Recursion อย่างไร?

สมมติว่าเรามีอาร์เรย์ของตัวเลขที่มีรายการซ้ำติดกันบางส่วนอย่างนี้:

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 ]