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

เรียงลำดับอาร์เรย์ใน JavaScript: sort และ compare function


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()