JavaScript sort ข้อมูลตัวเลข ไม่ถูกต้อง?
พอดีวันนี้ได้มีโอกาส นั่ง sort และ merge พวกข้อมูลจาก Array ก็เลยได้ไอเดีย นำมาเขียนเป็นบทความซะเลย เกี่ยวกับการ Sort ใน JavaScript
ปกติเราสามารถเรียงข้อมูลใน Array ได้ง่ายๆ ด้วย sort()
ใช่มั้ย? แต่บางครั้ง ก็มีปัญหา เช่น
เพราะอะไร? เพราะว่า sort()
มันจะแปลงข้อมูลใน Array เป็น String ไม่ใช่ number ฉะนั้น ข้อมูล array เวลา sort()
ตัว 10 ก็เลยมาก่อน 2 นั่นเอง
ข้อควรรู้เกี่ยวกับ sort()
- จะ sort โดยการเปรียบเทียบ ข้อมูลใน array เป็น string ไม่ใช่ number
- จะทำการเรียงลำดับข้อมูล (default จากน้อยไปมาก)
- จะทำกำการเรียงข้อมูลจากข้อมูลเก่า (ไม่ได้ copy) มันจะเปลี่ยนข้อมูล array เราเลย ฉะนั้นใครใช้ ระวังด้วย ควร copy array แทนที่จะแก้ไข original array.
ใช้ Object.assign() หรือ Spread Operator
เราสามารถ custom sort ได้มั้ย?
คำตอบคือได้ครับ รูปแบบ syntax จะเป็นแบบนี้ คือ sort()
จะรับ custom function ได้
โดย compareFn
จะเป็น function ที่มี 2 arguments คือ
- a - element ตัวแรก
- b - element ตัวที่สอง
ค่าที่ compareFn
return จะมีผลต่อการ sort
- ถ้า return ค่า < 0 จะ sort a ก่อน b
- ถ้า return ค่า > 0 จะ sort b ก่อน a
- ถ้า return = 0 จะไม่ sort (เรียงเหมือนเดิม)
ก่อนหน้านี้ เรามีปัญหากับการ sort number ใช่มั้ย ลองเอาชุด ข้อมูลเดิมมา
จากนั้น เราจะใช้ function compareFn แทนที่ default sort()
ข้อมูลก็จะทำการ sort เรียงจากค่าที่น้อยไปมาก นั่นเอง
สรุป
บางครั้งก็ลืมๆ เหมือนกันว่า sort()
มันเรียง alphabet ไม่ใช่ number ถ้าใครจะ sort ด้วย Number ก็อย่าลืมทำ compareFn เองนะ แล้วที่สำคัญอย่าลืม copy array อย่าไปแก้ค่า original data เด็ดขาด
เรียงค่า จากน้อยไปมาก
เรียงค่า จากมากไปน้อย
Happy Coding ❤️
- Authors
-
Chai Phonbopit
เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust