ปัญหา
เราจำเป็นต้องเขียนฟังก์ชัน 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