Sắp xếp Tiếng Việt trong JavaScript

Sắp xếp là một bài toán không thể thiếu trong lập trình. Tuy nhiên, nhiều bạn vẫn đang gặp khó khăn với việc sắp xếp Tiếng việt trong JavaScript.

Vì vậy, mình sẽ ra mắt với bạn về cách mình xử lý bài toán sắp xếp Tiếng Việt này .

Nhắc lại hàm sort() trong JavaScript

Trong bài viết về sắp xếp mảng, mình đã ra mắt với bạn khá cụ thể về hàm sort ( ) và cách tiến hành 1 số ít thuật toán sắp xếp cơ bản .

Bây giờ, mình sẽ nhắc lại hàm sort() một chút cho bạn tiện theo dõi. Vì phần sau đây sử dụng hàm này để sắp xếp Tiếng Việt trong JavaScript.

Cú pháp cơ bản của hàm sort(compareFunction) là:

arr.sort(compareFunction);

► Tham số compareFunction:

  • Là hàm dùng để xác định thứ tự sắp xếp.
  • Nếu bạn bỏ qua tham số này, mặc định JavaScript sẽ sắp xếp theo thứ tự tăng dần trong bảng mã Unicode (đơn giản là thứ tự tăng dần bảng chữ cái).
  • Ý nghĩa đối với thứ tự sắp xếp:
    • Nếu hàm compareFunction(a, b) trả về giá trị nhỏ hơn 0 thì a sẽ đứng trước b.
    • Nếu hàm compareFunction(a, b) trả về giá trị lớn hơn 0 thì a sẽ đứng sau b.
    • Nếu hàm compareFunction(a, b) trả về giá trị bằng 0 thì giữ nguyên thứ tự a, b.

► Giá trị trả về :

  • Là mảng đã được sắp xếp.
  • Mảng ban đầu có bị thay đổi.

Ví dụ :

const a = [" c ", " g ", " w ", " a "];
const b = a.sort();

console.log(a);  
console.log(b); 

Trên đây là những kiến thức cơ bản về cách sử dụng hàm sort() trong JavaScript. Tiếp theo, mình bắt đầu áp dụng hàm sort() để sắp xếp Tiếng Việt trong JavaScript.

Sắp xếp Tiếng Việt trong JavaScript

Đặt bài toán

Giả sử mình có một mảng string Tiếng Việt là tên một số ít tỉnh thành tại Nước Ta :

const provinces = [
  " Hà Giang ",
  " Hà Nam ",
  " Thành Phố Hà Nội ",
  " thành phố Hà Tĩnh ",
  " Hòa Bình ",
  " Hưng Yên ",
  " Thành Phố Hải Dương ",
  " Hải Phòng Đất Cảng ",
  " Hậu Giang ",
];

Mình cần sắp xếp những tên này theo thứ tự tăng dần của bảng vần âm Tiếng Việt. Kết quả mong ước thu được là :

const sorted = 

[

" Hà Giang ", " Hà Nam ", " TP.HN ", " TP Hà Tĩnh ", " Thành Phố Hải Dương ", " Hải Phòng Đất Cảng ", " Hậu Giang ", " Hòa Bình ", " Hưng Yên ", ];

Sắp xếp Tiếng Việt bằng hàm sort() thông thường

Trước tiên, mình thử sắp xếp mảng trên bằng hàm sort() thông thường.

Vì mặc định hàm sort() sẽ sắp xếp string theo thứ tự tăng dần nên mình không cần truyền vào compareFunction.

Do đó, tác dụng thu được như sau :

const result = provinces.sort();
console.log(result);

Kết quả trên là sai so với mong muốn ban đầu. Vậy mình phải làm sao đây?

Sắp xếp Tiếng Việt trong JavaScript với localeCompare()

Nguyên nhân hàm sort() trên thực hiện sai là vì nó đang so sánh string với Tiếng Anh. Vì vậy, mấu chốt của vấn đề là: làm sao có thể so sánh string với Tiếng Việt để đưa vào hàm sort()?

Câu trả lời là: sử dụng phương thức localeCompare() với cú pháp cơ bản là:

a.localeCompare(b);

Có 3 trường hợp xảy ra với tác dụng trả về :

  • Nếu kết quả trả về nhỏ hơn 0 thì a sẽ đứng trước b.
  • Nếu kết quả trả về lớn hơn 0 thì a sẽ đứng sau b.
  • Nếu kết quả trả về bằng 0 thì ab giống nhau.

Thật là trùng hợp, cách hoạt động của phương thức localeCompare() lại hoàn toàn giống với compareFunction bên trên. Vì vậy, mình có thể áp dụng ngay để sắp xếp Tiếng Việt như sau:

const result = provinces.sort((

a, b

) => a.localeCompare(b)); console.log(result);

Kết quả thu được bây giờ hoàn toàn đúng với mong đợi.

Lời kết

Như vậy là mình đã sắp xếp Tiếng Việt trong JavaScript một cách đơn thuần rồi phải không ?
Ngoài cách làm trên ra, bạn còn biết giải pháp nào khác để sắp xếp Tiếng Việt trong JavaScript không ?
Nếu có thì bạn hãy san sẻ dưới phần phản hồi nhé !

ĐÁNH GIÁ post
Bài viết liên quan

Tư vấn miễn phí (24/7) 094 179 2255