ภาพรวม
บทความนี้สาธิตวิธีหา 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)