0Pricing
JavaScript Academy · บทเรียน

การเรียงลำดับตามท้องถิ่น

เรียงสตริงอย่างถูกต้องด้วย Intl.Collator

การเรียงลำดับตามท้องถิ่น เป็นบทเรียน JavaScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน JavaScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดการเรียงลำดับเริ่มต้นจึงล้มเหลว

sort() ของอาร์เรย์จะเปรียบเทียบสตริงด้วยหน่วยโค้ด UTF-16 ทำให้ตัวพิมพ์ใหญ่เรียงก่อนตัวพิมพ์เล็ก และจัดการเครื่องหมายกำกับเสียงได้ไม่ถูกต้อง จึงไม่เหมาะกับรายการที่มนุษย์อ่าน

const words = ["banana", "Apple", "cherry"];
console.log([...words].sort()); // ["Apple","banana","cherry"] — capital wins

localeCompare

String.prototype.localeCompare เปรียบเทียบสตริงสองรายการโดยใช้กฎของภูมิภาค และส่งคืนค่าลบ ศูนย์ หรือค่าบวก

console.log("apple".localeCompare("banana")); // -1
console.log("banana".localeCompare("apple")); // 1

การเรียงลำดับด้วย localeCompare

ส่งเมธอดนี้เป็นตัวเปรียบเทียบเพื่อให้ได้ลำดับที่เป็นมิตรต่อผู้อ่าน

const words = ["banana", "Apple", "cherry"];
console.log([...words].sort((a, b) => a.localeCompare(b)));
// ["Apple", "banana", "cherry"] — case-insensitive ordering

Intl.Collator

สำหรับการเรียงลำดับรายการจำนวนมาก Intl.Collator จะทำงานเร็วกว่า ให้สร้างครั้งเดียวแล้วใช้เมธอด compare ซ้ำ

const collator = new Intl.Collator("en-US");
const words = ["banana", "Apple", "cherry"];
console.log([...words].sort(collator.compare));

เครื่องหมายกำกับเสียง

ตัวเปรียบเทียบจะเรียงอักขระที่มีเครื่องหมายกำกับเสียงได้ถูกต้องตามภูมิภาค ต่างจากการเปรียบเทียบหน่วยโค้ด

const words = ["zebra", "ela", "elf", "elan"];
const collator = new Intl.Collator("fr");
console.log([...words].sort(collator.compare));

ความละเอียดในการเปรียบเทียบ

sensitivity ควบคุมว่าความแตกต่างใดมีความสำคัญ: "base" จะไม่สนใจตัวพิมพ์เล็กใหญ่และเครื่องหมายกำกับเสียง, "accent" จะสนใจเฉพาะเครื่องหมายกำกับเสียง และ "variant" จะแยกความแตกต่างทั้งหมด

const c = new Intl.Collator("en", { sensitivity: "base" });
console.log(c.compare("apple", "APPLE")); // 0 (treated equal)

การเรียงลำดับตัวเลข

numeric: true จะเรียงตัวเลขที่อยู่ภายในข้อความตามค่า ดังนั้น "ไฟล์2" จึงมาก่อน "ไฟล์10"

const files = ["file10", "file2", "file1"];
const c = new Intl.Collator("en", { numeric: true });
console.log([...files].sort(c.compare)); // ["file1","file2","file10"]

ลำดับตัวพิมพ์ใหญ่ก่อน

caseFirst: "upper" หรือ "lower" จะกำหนดว่าตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กควรเรียงก่อน เมื่อความแตกต่างอื่น ๆ เท่ากัน

const c = new Intl.Collator("en", { caseFirst: "upper" });
console.log(["b", "B", "a", "A"].sort(c.compare));

ภูมิภาคมีผลต่อลำดับ

แต่ละภาษาเรียงตามตัวอักษรแตกต่างกัน ในภาษาสวีเดน ตัวอักษรที่มีเครื่องหมายกำกับเสียงบางตัวจะเรียงหลัง z ไม่ได้อยู่ใกล้ a

const words = ["z", "a", "o"];
console.log([...words].sort(new Intl.Collator("sv").compare));

การค้นหาด้วย usage

usage: "search" จะปรับตัวเปรียบเทียบให้เหมาะกับการจับคู่แทนการเรียงลำดับ มีประโยชน์สำหรับการกรองโดยไม่คำนึงถึงเครื่องหมายกำกับเสียง

const c = new Intl.Collator("en", { usage: "search", sensitivity: "base" });
function matches(a, b) { return c.compare(a, b) === 0; }
console.log(matches("cafe", "CAFE")); // true

การเรียงลำดับออบเจ็กต์

ใช้ตัวเปรียบเทียบกับคีย์ขณะเรียงลำดับอาร์เรย์ของออบเจ็กต์

const people = [{ name: "Bob" }, { name: "alice" }, { name: "Carol" }];
const c = new Intl.Collator("en");
console.log(people.sort((a, b) => c.compare(a.name, b.name)).map((p) => p.name));

ตรวจสอบความเข้าใจ

ทดสอบการเรียงลำดับตามภูมิภาค

ทบทวน: การเรียงลำดับตามภูมิภาค

คุณเห็นแล้วว่าเหตุใด sort() เริ่มต้นจึงไม่ถูกต้อง ใช้ localeCompare และ Intl.Collator ที่ทำงานเร็วกว่า จัดการเครื่องหมายกำกับเสียง ความละเอียดในการเปรียบเทียบ การเรียงลำดับตัวเลขและตัวพิมพ์ใหญ่เล็ก ตัวอักษรเฉพาะภูมิภาค และการจับคู่เพื่อค้นหา บทนี้ทำให้หลักสูตร Intl ครบถ้วนแล้ว

คำถามที่พบบ่อย

บทเรียน “การเรียงลำดับตามท้องถิ่น” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การเรียงลำดับตามท้องถิ่น” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส JavaScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การเรียงลำดับตามท้องถิ่น”

เรียงสตริงอย่างถูกต้องด้วย Intl.Collator คุณปฏิบัติ JavaScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน JavaScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน JavaScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การเรียงลำดับตามท้องถิ่น” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน JavaScript Academy นี้ได้ไหม

ได้ บทเรียน JavaScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การจัดรูปแบบตัวเลขและสกุลเงิน
  2. การจัดรูปแบบวันที่และเวลา
  3. เวลาแบบสัมพันธ์และพหูพจน์
  4. การเรียงลำดับตามท้องถิ่น
← กลับไปที่ JavaScript Academy