ปัญหา
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับสตริง str เป็นอาร์กิวเมนต์แรกและจำนวนเต็ม n เป็นอาร์กิวเมนต์ที่สอง สตริง str ประกอบด้วยอักขระที่เป็นตัวอักษรและตัวเลขคละกันและขีดกลาง
ขีดกลางแบ่งอักขระที่เป็นตัวอักษรและตัวเลขคละกันภายในสตริงออกเป็นกลุ่ม (เช่น หากมี n ขีดกลาง สตริงจะถูกแบ่งออกเป็นกลุ่ม n+1) ขีดกลางในสตริงที่กำหนดอาจวางผิดที่
เราต้องการให้อักขระแต่ละกลุ่มมีความยาว K (ยกเว้นกลุ่มแรกที่อาจสั้นกว่า แต่ยังต้องมีอักขระอย่างน้อยหนึ่งตัว)
เพื่อให้เป็นไปตามข้อกำหนดนี้ เราจะใส่ขีดกลางอีกครั้ง นอกจากนี้ ฟังก์ชันของเราจำเป็นต้องแปลงอักษรตัวพิมพ์เล็กทั้งหมดในสตริงเป็นตัวพิมพ์ใหญ่
ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −
const str = '8-4B0t37-k'; const num = 4;
จากนั้นผลลัพธ์ควรเป็น −
const output = '84B0-T37K';
คำอธิบายผลลัพธ์:
สตริง str ถูกแบ่งออกเป็นสองส่วน โดยแต่ละส่วนมีอักขระ 4 ตัว
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const str = '8-4B0t37-k'; const num = 4; const formatKey = (str = '', num = 1) => { let acc = ''; let flag = num; for(let i = str.length - 1; i >= 0; i--){ const char = str.charAt(i); if(char !== '-') { if(flag === 0) { acc = `-${acc}`; flag = num; }; acc = `${char.toUpperCase()}${acc}`; flag -= 1; }; }; return acc; }; console.log(formatKey(str, num));
คำอธิบายโค้ด
ขั้นตอนที่เราทำในฟังก์ชัน formatKey() คือ −
-
เราทำซ้ำในทางกลับกัน เพื่อให้เราสามารถรองรับกรณีของตัวอักษรที่เหลือ
-
เราเก็บจำนวนอักขระที่แทรกไว้ และเมื่อเป็น 0 เราก็ใส่ dash และรีเซ็ตเป็น num
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
84B0-T37K