เมธอด sort() เริ่มต้นจะเรียงแบบ String (Lexicographic) ทำให้ [1, 10, 2] กลายเป็น [1, 10, 2] ต้องส่ง Compare Function เข้าไปเพื่อเรียงตัวเลขได้ถูกต้อง
ตัวอย่างโค้ด
<!DOCTYPE html>
<html>
<body>
<script>
var arr = [75, 20, 90, 9, 49, 32, 69, 66];
document.write("Initial Values: " + arr);
function myFunction() {
// Compare Function: val1 - val2 = Ascending (น้อยไปมาก)
arr.sort(function(val1, val2) { return val1 - val2; });
document.write("<br>Sorted Values: " + arr);
}
myFunction();
</script>
</body>
</html>
การทำงานของ Compare Function
val1 - val2 < 0→val1มาก่อนval2(Ascending)val1 - val2 > 0→val2มาก่อนval1(Descending)val1 - val2 === 0→ คงลำดับเดิม
รูปแบบย่อ (ES6 Arrow Function)
// Ascending (น้อยไปมาก) arr.sort((a, b) => a - b); // Descending (มากไปน้อย) arr.sort((a, b) => b - a);
ข้อควรระวัง
sort()แก้ไข Array ต้นฉบับ (Mutates Original Array)- หากต้องการเก็บต้นฉบับ ให้ Copy ก่อน:
[...arr].sort(...) - สำหรับตัวเลขใหญ่หรือ Floating Point ควรใช้
Intl.Collatorหรือ Library เช่น Lodash