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

วิธีที่ดีที่สุดในการเปรียบเทียบสตริงสองตัวใน JavaScript

คำตอบ: ใช้เมธอด localeCompare()

วิธีที่เหมาะสมที่สุดในการเปรียบเทียบสตริงใน JavaScript คือใช้เมธอด localeCompare() ซึ่งคำนึงถึงกฎภาษาและ locale

ค่าที่คืนกลับ

  • 0 : สตริงทั้งสองเท่ากัน
  • -1 : สตริงแรกเรียงก่อนสตริงที่สอง
  • 1 : สตริงที่สองเรียงก่อนสตริงแรก

ตัวอย่างโค้ด

<!DOCTYPE html>
<html>
<body>
  <button onclick="compareStr()">Compare Strings</button>
  <p id="test"></p>
  <script>
    function compareStr() {
      var string1 = "World";
      var string2 = "World";
      var result = string1.localeCompare(string2);
      document.getElementById("test").innerHTML = result;
    }
  </script>
</body>
</html>

ตัวอย่างเพิ่มเติม

"apple".localeCompare("banana");  // -1 (a มาก่อน b)
"banana".localeCompare("apple");  // 1
"apple".localeCompare("apple");   // 0

// รองรับ locale และตัวเลือก
"ä".localeCompare("z", "de");     // -1 (ในภาษาเยอรมัน ä เรียงก่อน z)
"ä".localeCompare("z", "sv");     // 1 (ในภาษาสวีดिश z เรียงก่อน ä)

// ตัวเลือก sensitivity
"abc".localeCompare("ABC", undefined, { sensitivity: 'base' }); // 0 (ignore case)
"abc".localeCompare("ABC", undefined, { sensitivity: 'variant' }); // -1 (case-sensitive)

วิธีอื่นๆและข้อจำกัด

วิธี คำอธิบาย ข้อจำกัด
===เปรียบเทียบค่าและชนิดข้อมูลไม่คำนึงถึง locale, case-insensitive ไม่ได้
==เปรียบเทียบค่า (มี type coercion)ไม่แนะนำ ให้ผลลัพธ์น่าประหลาดใจ
>, <เปรียบเทียบลำดับ Unicodeไม่คำนึงถึงกฎภาษา (locale)
localeCompare()เปรียบเทียบตามกฎภาษา/localeช้ากว่าเล็กน้อย แต่ถูกต้องที่สุด

สรุป

สำหรับการเปรียบเทียบสตริงทั่วไป (เฉพาะภาษาอังกฤษ ASCII) ใช้ === ได้ แต่สำหรับการเรียงลำดับ การค้นหา หรือรองรับหลายภาษา localeCompare() เป็นวิธีที่ดีที่สุดและถูกต้องที่สุด