เรามีอาร์เรย์ที่มีข้อมูลประเภท String และ number ผสมกัน เราต้องเขียนฟังก์ชันจัดเรียงที่จัดอาร์เรย์ให้ค่า NaN อยู่ท้ายสุดเสมอ อาร์เรย์ควรมีตัวเลขปกติทั้งหมดก่อน ตามด้วยสตริง และตามด้วยตัวเลข NaN
เรารู้ว่าชนิดข้อมูลของ NaN คือ "number" ดังนั้นเราไม่สามารถตรวจสอบ NaN ได้แบบ !number && !string นอกจากนี้ ถ้าเราตรวจสอบความจริงและความเท็จขององค์ประกอบอย่างเดียว สตริงว่างก็จะผ่านเงื่อนไขเดียวกับที่ NaN หรือ undefined ผ่าน
ตรวจสอบ NaN
เราตรวจสอบ NaN ยังไง? ตัวเลข NaN มีคุณสมบัติพิเศษ คือ NaN ไม่เท่ากับ NaN เอง นั่นคือ สำหรับค่าอื่นๆ ใน JS ไหนก็ตาม value === value จะให้ true แต่ NaN === NaN จะให้ false เสมอ เราจะใช้ข้อเท็จจริงนี้เพื่อจัดเรียงอาร์เรย์ของเรา
ตัวอย่าง
const arr = [344, 'fd', NaN, '', 5, 'f',76, NaN, 76, NaN, 87, 89, 'fdf', 23, 'fgg', NaN, 765]; const sorter = (a, b) => { if(a !== a){ return 1; }else if(b !== b){ return -1; } return typeof a === 'number' ? -1 : 1; }; arr.sort(sorter); console.log(arr);ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้
[ 765, 23, 89, 87, 76, 76, 5, 344, 'fd', '', 'f', 'fdf', 'fgg', NaN, NaN, NaN, NaN ]