Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

เรียงอาร์เรย์ตัวเลขและตัวอักษร (Natural Sort) ใน JavaScript

เรามีอาร์เรย์ที่มีตัวเลขและสตริงผสม ต้องการเรียงให้ตัวเลขเรียงก่อนและวางหน้าสตริงทุกตัว แล้วค่อยสตริงเรียงตามลำดับอักษร

เช่น อาร์เรย์นี้หลังเรียง

const arr = [1, 'fdf', 'afv', 6, 47, 7, 'svd', 'bdf', 9];

ควรเป็น

[1, 6, 7, 9, 47, 'afv', 'bdf', 'fdf', 'svd']

เขียนโค้ด

ตัวอย่าง

const arr = [1, 'fdf', 'afv', 6, 47, 7, 'svd', 'bdf', 9];
const sorter = (a, b) => {
  if(typeof a === 'number' && typeof b === 'number'){
    return a - b;
  }else if(typeof a === 'number' && typeof b !== 'number'){
    return -1;
  }else if(typeof a !== 'number' && typeof b === 'number'){
    return 1;
  }else{
    return a > b ? 1 : -1;
  }
}
arr.sort(sorter);
console.log(arr);

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็น

[ 1, 6, 7, 9, 47, 'afv', 'bdf', 'fdf', 'svd' ]

เข้าใจโค้ด

ส่วนสำคัญคือฟังก์ชัน sorter เรารู้ว่า callback รับสองอาร์กิวเมนต์ คือสมาชิกของอาร์เรย์

มี 4 กรณี

  • a และ b ทั้งคู่เป็นตัวเลข → วางตัวเลขน้อยกว่าก่อน
  • a เป็นตัวเลข b เป็นสตริง → วางตัวเลข (a) ก่อนสตริง (b) ตามโจทย์
  • a เป็นสตริง b เป็นตัวเลข → วาง b ก่อน a
  • a และ b ทั้งคู่เป็นสตริง → ตรวจสอบว่าสตริงไหนมาก่อนตามลำดับอักษร วางตัวนั้นก่อน