Sắp xếp dòng A→Z cho 5 dòng “ô, a, đ, ă, e” ra đúng thứ tự bảng chữ cái tiếng Việt “a, ă, đ, e, ô”, trong khi hàm sắp xếp mặc định của JavaScript cho ra “a, e, ô, ă, đ”. Ngoài A→Z và Z→A, công cụ còn xếp theo độ dài, theo số trong dòng và trộn ngẫu nhiên. Danh sách xử lý trên trình duyệt, không lưu dữ liệu.
Cách sắp xếp dòng theo bảng chữ cái tiếng Việt
Công cụ so hai dòng bằng bộ so sánh chuỗi theo ngôn ngữ tiếng Việt của trình duyệt (Intl.Collator), không so theo mã ký tự.
- Chuẩn hoá văn bản về dạng dựng sẵn NFC, tách thành từng dòng.
- Bỏ dòng trống nếu bật “Bỏ dòng trống” (mặc định bật); bỏ dòng trùng nếu bật “Bỏ dòng trùng”, giữ lần xuất hiện đầu.
- So chữ theo thứ tự a, ă, â, b, c, d, đ, e, ê, g, h, i, k, l, m, n, o, ô, ơ, p, q, r, s, t, u, ư, v, x, y. Hai dòng chỉ khác nhau ở dấu thanh được xếp cạnh nhau.
- Số nằm trong chữ được so theo giá trị, nên “mục 2” đứng trước “mục 10”.
- Hai dòng bằng nhau theo quy tắc so giữ nguyên thứ tự ban đầu.
| Nút chế độ | Cách xếp |
|---|---|
| A → Z / Z → A | Theo bảng chữ cái tiếng Việt, xuôi hoặc ngược |
| Ngắn → dài / Dài → ngắn | Theo số ký tự của dòng; dòng dài bằng nhau xếp A→Z |
| Theo số | Theo số đầu tiên xuất hiện trong dòng; dòng không có số xuống cuối |
| Ngẫu nhiên | Trộn đều mọi dòng; nút “Trộn lại” cho một thứ tự mới |
Mặc định công cụ không phân biệt hoa/thường khi so; bật “Phân biệt hoa/thường” nếu cần “an” và “An” là hai mục khác nhau. Độ dài dòng tính theo ký tự như trang phương pháp đếm mô tả.
Vì sao sắp xếp mặc định đẩy chữ Đ xuống cuối
Hàm sort mặc định trong JavaScript so theo mã UTF-16, mà mọi chữ Việt có dấu dựng sẵn đều có mã lớn hơn chữ z.
Chữ “đ” mang mã U+0111, “ă” là U+0103, “ô” là U+00F4, còn “z” chỉ là U+007A. So theo mã thì “Đức” đứng sau “Yến”, và “ô” lại đứng trước “ă” vì U+00F4 nhỏ hơn U+0103. Nhiều công cụ sắp xếp trực tuyến viết cho tiếng Anh dùng đúng phép so này. Excel và Google Sheets so theo quy tắc ngôn ngữ nên thường tốt hơn, nhưng kết quả còn tuỳ bản cài đặt và ngôn ngữ vùng; tôi không dám hứa chúng luôn khớp bảng chữ cái, nên danh sách quan trọng vẫn nên soát lại chữ Đ và Ư.
Ví dụ: sắp tên học sinh cho danh sách lớp
Một giáo viên chủ nhiệm dán danh sách mới nhận đầu năm học; mọi kết quả trong bảng lấy từ bộ kiểm thử của công cụ.
| Danh sách gốc | Chế độ, tuỳ chọn | Kết quả |
|---|---|---|
| ô, a, đ, ă, e | A → Z | a, ă, đ, e, ô |
| ô, a, đ, ă, e | Z → A | ô, e, đ, ă, a |
| mục 10, mục 2 | A → Z | mục 2, mục 10 |
| 10, 9, 100 | Theo số | 9, 10, 100 |
| b, a, (dòng trống), b | A → Z, bật Bỏ dòng trùng | a, b · 1 dòng trùng đã bỏ |
Chế độ theo số hiểu cách viết số của người Việt: “1.250.000 đ” được đọc là một triệu hai trăm năm mươi nghìn, “nặng 2,5kg” là hai phẩy năm. Nhờ vậy bảng giá dán từ website bán hàng xếp đúng từ rẻ đến đắt, không bị “1.250.000” chen trước “99.000”.
Danh sách lớp xếp theo tên, không theo họ
Danh sách lớp, sổ điểm và danh sách phòng thi ở Việt Nam thường xếp theo tên rồi mới tới họ đệm, còn công cụ so từ chữ đầu dòng, tức là họ.
Công cụ không có chế độ xếp theo tiếng cuối. Tôi chọn không thêm chế độ đó vì tên có thể có hai tiếng, có người ghi cả mã học sinh cuối dòng. Thay vào đó, bạn đảo tên lên đầu bằng tìm và thay thế có regex, sắp xếp dòng, rồi đảo lại:
- Ở công cụ tìm và thay thế, bật regex, tìm
(.+) (.+), thay bằng$2, $1: “Nguyễn Văn An” thành “An, Nguyễn Văn”. - Dán kết quả vào đây, chọn A → Z. “An, Nguyễn Thị” sẽ đứng trước “An, Nguyễn Văn”, rồi tới “Anh”, “Ân”, “Bình”.
- Quay lại tìm và thay thế, tìm
(.+?), (.+), thay bằng$2 $1để trả họ tên về như cũ.
Trường hợp đặc biệt: dấu thanh, chữ hoa, số lẫn trong chữ
Thứ tự dấu thanh giữa các chữ cùng gốc do dữ liệu ngôn ngữ của trình duyệt quyết định: trên trình duyệt dùng dữ liệu Unicode CLDR, “ca, cà, cả, cã, cá, cạ” xếp theo đúng thứ tự này.
Khi không phân biệt hoa/thường, “an” và “An” được coi là bằng nhau và giữ thứ tự dán vào. Dòng bắt đầu bằng dấu ngoặc, gạch đầu dòng hay chữ số được so luôn cả ký tự đó, nên “- Bình” có thể đứng trước “An”; bỏ ký hiệu đầu dòng trước khi sắp. Ở chế độ theo số, chỉ số đầu tiên trong dòng được dùng: “Lớp 10A1 – 42 học sinh” xếp theo 10, không theo 42.
Công cụ liên quan
- Xoá dòng trùng lọc lặp mà vẫn giữ thứ tự gốc, hợp khi không muốn sắp lại danh sách.
- Tìm và thay thế hàng loạt đảo họ và tên hoặc bỏ ký hiệu đầu dòng trước khi sắp xếp.
- Chuyển chữ hoa thường đưa danh sách gõ lộn xộn về cùng một kiểu viết hoa trước khi xếp.
- Đếm dòng kiểm tra sĩ số sau khi bỏ dòng trống, dòng trùng.
Câu hỏi thường gặp
Sắp xếp tên theo bảng chữ cái tiếng Việt trong Excel thế nào?
Tách tên ra một cột riêng, chọn vùng dữ liệu, vào Data → Sort và xếp theo cột tên trước, cột họ đệm sau. Kết quả chữ Đ, Ư phụ thuộc cài đặt ngôn ngữ của Excel nên cần soát lại. Nếu chỉ có một cột họ tên, dán vào công cụ trên trang để sắp xếp dòng theo bảng chữ cái tiếng Việt.
Chữ Đ đứng sau chữ D hay sau chữ Z?
Theo bảng chữ cái tiếng Việt, Đ đứng ngay sau D và trước E. Nó chỉ nhảy xuống cuối khi phần mềm so theo mã ký tự, vì mã của Đ lớn hơn mã của Z. Công cụ này dùng quy tắc so của tiếng Việt, nên “Dung”, “Dũng” rồi mới tới “Đạt”, “Đức”.
Sắp xếp dòng có phân biệt chữ hoa, chữ thường không?
Mặc định không. “an” và “An” được coi là bằng nhau và giữ thứ tự như lúc dán vào. Bật “Phân biệt hoa/thường” thì hai dòng này khác nhau và chữ thường thường đứng trước. Tuỳ chọn này cũng áp dụng cho “Bỏ dòng trùng”: khi tắt, “An” và “an” chỉ còn lại một dòng.
Trộn ngẫu nhiên danh sách để bốc thăm có công bằng không?
Công cụ dùng thuật toán trộn Fisher–Yates với bộ sinh số ngẫu nhiên của trình duyệt, mỗi thứ tự có khả năng xuất hiện như nhau. Bộ sinh số này đủ cho chia nhóm, xếp chỗ ngồi hay thứ tự thuyết trình. Với bốc thăm có giải thưởng hoặc cần kiểm chứng sau này, nên dùng quy trình có người chứng kiến.
Vì sao dòng có số lại xếp sai khi chọn A → Z?
Chế độ A → Z so số trong chữ theo giá trị, nên “Bài 2” đứng trước “Bài 10”. Nếu bạn cần thứ tự kiểu máy tính cũ, “Bài 10” trước “Bài 2”, thì không có tuỳ chọn đó. Khi dòng bắt đầu bằng số tiền hay số lượng, chế độ Theo số cho kết quả rõ ràng hơn.
Căn cứ và nguồn
- Intl.Collator — MDN: so sánh chuỗi theo ngôn ngữ, tuỳ chọn độ nhạy và so số trong chữ.
- Array.prototype.sort() — MDN: sắp xếp mặc định so theo mã UTF-16, không hợp với chữ có dấu.
- Unicode Technical Standard #10, Unicode Collation Algorithm: thuật toán so sánh chuỗi, cần điều chỉnh riêng cho từng ngôn ngữ.
Kiểm tra: 16/09/2026. Thứ tự sắp xếp dòng phụ thuộc dữ liệu ngôn ngữ của trình duyệt; trình duyệt quá cũ có thể xếp dấu thanh khác đôi chút.