สมมติว่าเรามีอาร์เรย์ตัวเลขที่เรียงแล้วดังนี้ ซึ่งอาจมีตัวเลขเรียงติดกัน
const arr = [1, 2, 3, 5, 7, 8, 9, 11];
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ดังกล่าว
ฟังก์ชันควรสร้างลำดับสำหรับอาร์เรย์นี้ ลำดับควรเป็นอย่างที่สำหรับองค์ประกอบที่เรียงติดกันทั้งหมดของอาร์เรย์ เราต้องเขียนแค่ตัวเลขเริ่มต้นและตัวเลขสุดท้าย แทนที่ตัวเลขระหว่างด้วยเครื่องหมายแดช (-) และเก็บตัวเลขอื่นๆ ไว้เหมือนเดิม
ดังนั้น สำหรับอาร์เรย์ข้างต้น ผลลัพธ์ควรเป็นดังนี้
const output = '1-3,5,7-9,11';
ตัวอย่างโค้ด
โค้ดสำหรับการทำงานนี้จะเป็นดังนี้
const arr = [1, 2, 3, 5, 7, 8, 9, 11];
const buildSequence = (arr = []) => {
let pointer;
return arr.reduce((acc, val, ind) => {
if (val + 1 === arr[++ind]) {
if (pointer == null ) {
pointer = val;
};
return acc;
};
if (pointer) {
acc.push(`${pointer}-${val}`);
pointer = null;
return acc;
}
acc.push(val);
return acc;
}, []).join(',');
}
console.log(buildSequence(arr));ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้
1-3,5,7-9,11