JavaScript มีฟังก์ชัน sort ที่ทรงพลัง โดยค่าเริ่มต้นเรียงตามตัวอักษร ตัวอย่าง:
ตัวอย่าง
let arr1 = ["Zebra", "Bear", "Tiger"]; arr1.sort(); console.log(arr1);
ผลลัพธ์
จะได้ผลลัพธ์:
[ 'Bear', 'Tiger', 'Zebra' ]
ลองกับตัวเลข:
ตัวอย่าง
let arr1 = [1, 8, 31, 21]; arr1.sort(); console.log(arr1);
ผลลัพธ์
จะได้ผลลัพธ์:
[ 1, 21, 31, 8 ]
ไม่ใช่ที่คาดหวัง เพราะ sort เริ่มต้นเรียงแบบตัวอักษร ต้องส่ง compare function เข้าไป ตัวอย่างเรียงตัวเลข:
ตัวอย่าง
let arr1 = [1, 8, 31, 21]; arr1.sort((a, b) => a - b); console.log(arr1);
ผลลัพธ์
จะได้ผลลัพธ์:
[ 1, 8, 21, 31 ]
ใช้กับอาร์เรย์อ็อบเจกต์ได้ เช่น เรียงตาม name:
ตัวอย่าง
let people = [{
name: "Zoe",
age: 35
}, {
name: "Richard",
age: 21
}, {
name: "Agnes",
age: 25
}];
people.sort((a, b) => {
let nameA = a.name.toUpperCase();
let nameB = b.name.toUpperCase();
if (nameA < nameB) return -1;
if (nameA > nameB) return 1;
return 0;
})
console.log(people)
ผลลัพธ์
จะได้ผลลัพธ์:
[ { name: 'Agnes', age: 25 }, { name: 'Richard', age: 21 }, { name: 'Zoe', age: 35 } ]
sort แบบ in-place หากต้องการอาร์เรย์ใหม่ ใช้ arr.slice(0).sort()