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

การหาตำแหน่งตัวเลขที่ไม่ต่อเนื่องแรกในอาร์เรย์ JavaScript

ภาพรวม

บทความนี้สาธิตวิธีหา Index ของตัวเลขแรกที่ทำให้ลำดับตัวเลขไม่ต่อเนื่อง (Non-consecutive) โดยสมมติว่าตัวเลขควรเพิ่มขึ้นทีละ 1 (Arithmetic Progression with Common Difference = 1)

ตัวอย่าง

const arr = [1, 2, 3, 4, 5, 6, 8, 9, 10];
// ตัวเลข 7 หายไป -> 8 อยู่ที่ index 6 -> คืนค่า 6

const secondArr = [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
// ต่อเนื่องสมบูรณ์ -> คืนค่า -1

การนำไปใช้

const findException = (arr) => {
  for (let i = 0; i < arr.length - 1; i++) {
    if (arr[i + 1] - arr[i] !== 1) {
      return i + 1; // คืนค่า index ของตัวเลขที่ผิด
    }
  }
  return -1; // ไม่มีตัวไหนผิด
};

console.log(findException(arr));      // 6
console.log(findException(secondArr)); // -1

ผลลัพธ์

6 -1

การขยาย: รองรับ Common Difference อื่นๆ

const findNonConsecutive = (arr, diff = 1) => {
  for (let i = 0; i < arr.length - 1; i++) {
    if (arr[i + 1] - arr[i] !== diff) {
      return i + 1;
    }
  }
  return -1;
};

// ตัวอย่าง: [2, 4, 6, 9, 8] diff=2 -> index 3 (ควรเป็น 8 แต่เป็น 9)

วิธีการทันสมัย

const findNonConsecutiveModern = (arr) => {
  return arr.findIndex((val, i, a) => i > 0 && val - a[i - 1] !== 1);
};

// คืนค่า -1 ถ้าไม่พบ (findIndex คืน -1 เอง)

การประยุกต์ใช้

  • Data Validation: ตรวจสอบลำดับหมายเลข running number
  • Log Analysis: หาช่วงเวลาที่ขาด log
  • Financial: ตรวจสอบหมายเลขเช็ค/ใบเสร็จที่ขาดหาย

กรณีพิเศษ

  • อาร์เรย์ว่างหรือมี 1 元素: คืน -1
  • ตัวเลขลดลง (Descending): ต้องระบุ diff = -1
  • ตัวเลขซ้ำ: ถือว่าไม่ต่อเนื่อง (diff = 0)