สมมติเรามีอาร์เรย์ของสตริงแบบนี้:
const arr = ['1185 Design','3 D Exhibits','44Doors', '4Concepts','ABC Data','acceleration'];
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์แบบนี้และจัดเรียง in-place
ฟังก์ชันจัดเรียงควรทำให้สตริงที่ขึ้นต้นด้วยอักขระพิเศษ/ตัวเลขอยู่ก่อน แล้วตามด้วยลำดับอักษร และถ้ามีสตริงสองตัวขึ้นต้นด้วยตัวอักษรเดียวแต่มี case ต่างกัน สตริงที่ขึ้นต้นด้วยตัวพิมพ์เล็กควรอยู่ก่อน
ตัวอย่างโค้ด
const arr = ['1185 Design','3 D Exhibits','44Doors', '4Concepts','ABC Data','acceleration'];
const caseSensitiveSort = (arr = []) => {
const sorter = (a, b) => {
if (a === b){
return 0
};
if (a.charAt(0) === b.charAt(0)){
return sorter(a.slice(1), b.slice(1))
}
if(a.charAt(0).toLowerCase() === b.charAt(0).toLowerCase()){
if(/^[a-z]/.test(a.charAt(0)) && /^[A-Z]/.test(b.charAt(0))){
return -1;
};
if(/^[a-z]/.test(b.charAt(0)) && /^[A-Z]/.test(a.charAt(0))){
return 1;
};
};
return a.localeCompare(b);
};
arr.sort(sorter);
}
caseSensitiveSort(arr);
console.log(arr);
ผลลัพธ์
ผลลัพธ์ที่แสดงในคอนโซลจะเป็นดังนี้:
[ '1185 Design', '3 D Exhibits', '44Doors', '4Concepts', 'acceleration', 'ABC Data' ]