aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
SAVED POSTS
aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
aedev.net
No Result
View All Result
Minh họa kiến trúc backend API gọn gàng cho sản phẩm nhỏ

Intl.Collator numeric: sắp Mục 2 trước Mục 10 trong danh sách tiếng Việt

Suong Nguyen by Suong Nguyen
10/11/2026
in Đánh giá
0
585
SHARES
3.2k
VIEWS
Summarize with ChatGPTShare to Facebook

Một danh sách có Mục 1, Mục 2 và Mục 10 lại hiển thị theo thứ tự 1, 10, 2. Đó có thể là kết quả hợp lệ của cách so chuỗi đang dùng, nhưng không khớp mong đợi đọc số trong tên. Khi tên có tiếng Việt và chữ số, cần chọn quy tắc sắp thứ tự rõ ràng thay vì tự cắt vài ký tự rồi ép thành số.

Bài đối chiếu MDN ngày 10/11/2026, chạy trên Node.js 24.18.1 với ICU 78.3. Tiêu chí so sánh gồm nghĩa của thứ tự, cấu hình locale, cách xử lý tên tương đương và phạm vi triển khai. Không có benchmark hoặc kết luận tốc độ trên browser, Hermes hay thiết bị.

So kết quả trước khi đổi code sản phẩm

const names = ['Mục 10', 'Mục 2', 'Mục 1'];
const collator = new Intl.Collator('vi', {numeric: true});
console.log(JSON.stringify([...names].sort()));
console.log(JSON.stringify([...names].sort(collator.compare)));
console.log(collator.resolvedOptions().locale);

Trong môi trường kiểm tra, hai danh sách lần lượt là Mục 1, Mục 10, Mục 2 và Mục 1, Mục 2, Mục 10; locale được phân giải là vi. Hai lời gọi đều nhận một array sao chép để không làm đổi thứ tự array names trong fixture.

Intl.Collator constructor mô tả tùy chọn numeric cho việc so các đoạn chữ số theo giá trị số. Nó không chuyển toàn bộ tên thành một Number và không thay thế một parser định dạng dữ liệu nghiệp vụ.

Một cấu hình dùng lại cho nhiều phép so

Collator là một đối tượng giữ lựa chọn locale và options cho việc so sánh. Tạo nó tại phạm vi phù hợp rồi dùng compare giúp người đọc thấy quy tắc của danh sách nằm ở đâu. Không cần xây một bộ quy tắc cắt hậu tố số nếu yêu cầu của màn hình chính là thứ tự collation có numeric như ví dụ.

Theo compare, điều có ý nghĩa là dấu âm, dấu dương hoặc 0. Đừng viết kiểm tra buộc mọi cặp phải trả đúng -1 hoặc 1. Chỉ kiểm tra dấu hoặc thứ tự cuối cùng mà ứng dụng yêu cầu.

Khi tên khác chuỗi nhưng được so là ngang nhau

console.log(collator.compare('Mục 02', 'Mục 2'));

const records = [
  {id: 20, name: 'Mục 02'},
  {id: 10, name: 'Mục 2'},
  {id: 30, name: 'Mục 10'},
];
const ordered = [...records].sort((a, b) =>
  collator.compare(a.name, b.name) || a.id - b.id,
);
console.log(JSON.stringify(ordered.map(record => record.id)));

Fixture cho kết quả so bằng 0 và danh sách ID 10, 20, 30. Khóa phụ bằng ID giúp ví dụ quy định thứ tự cho hai tên được collator xem tương đương. ID ở đây là các số nguyên phân biệt đã biết; đoạn code không kiểm tra schema bản ghi hoặc giải quyết ID bị trùng.

Đừng dùng kết quả compare bằng 0 để kết luận hai bản ghi là cùng một thực thể. Quy tắc sắp tên và quy tắc định danh có mục đích khác nhau. Nếu tên dùng để tìm kiếm, xác định chính sách tìm kiếm riêng thay vì tự động nhận mọi option của phép sắp xếp.

Chọn cấu hình theo yêu cầu thật

Intl.Collator còn có các lựa chọn liên quan đến cách phân biệt chữ hoa và dấu. Bài chỉ kiểm thử numeric với các tên đã nêu, không chứng minh thứ tự của toàn bộ tiếng Việt hoặc mọi tổ hợp options. Khi sản phẩm có yêu cầu thứ tự tên người, hãy lấy ví dụ đại diện từ chính yêu cầu ấy.

Kiểm tra resolvedOptions và hỗ trợ locale trong runtime mục tiêu, nhất là khi mã chạy cả server và mobile. Một kết quả Node có ICU đầy đủ không bảo đảm một runtime khác chọn cùng dữ liệu locale hoặc cho cùng mọi thứ tự. Nếu cần thứ tự nhất quán giữa server phân trang và client hiển thị, thỏa thuận nơi chịu trách nhiệm sắp xếp và khóa phụ từ đầu.

Cách đánh giá trước khi áp dụng

Giữ bộ ca gồm tên có 1/2/10, tên trùng, tên có số 0 đầu và các chuỗi tiếng Việt mà người dùng thường gặp. Kiểm tra array gốc không đổi nếu caller cần giữ nó. Rà riêng bản ghi thiếu name hoặc sai kiểu thay vì để ép kiểu làm mất dấu dữ liệu không hợp lệ.

Về chi phí áp dụng, ví dụ dùng API tích hợp sẵn và không thêm package. Việc lựa chọn vẫn cần dựa trên semantics và khả năng runtime; bài không có bằng chứng tiết kiệm thời gian xử lý. Hãy chọn collator vì nó thể hiện đúng quy tắc đọc danh sách, rồi mới đo nếu quy mô dữ liệu khiến hiệu năng trở thành vấn đề thực tế.

Nguồn tham khảo

  • MDN: Intl.Collator
  • MDN: Intl.Collator constructor
  • MDN: Intl.Collator.compare

Tags: Intl.CollatorJavaScriptTiếng Việt
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

Minh họa kiến trúc backend API gọn gàng cho sản phẩm nhỏ

Array.at(-1) và array[-1]: đọc phần tử cuối hay thuộc tính tên âm?

by Suong Nguyen
09/11/2026
0

So sánh Array.at với truy cập bằng ngoặc vuông qua chỉ số âm, mảng rỗng và phần tử object để chọn cách đọc cuối danh sách rõ ràng.

Minh họa kiến trúc backend API gọn gàng cho sản phẩm nhỏ

Math.floor và Math.trunc: chọn đúng quy tắc khi dữ liệu có số âm

by Suong Nguyen
08/11/2026
0

So sánh floor và trunc bằng ca số âm, tọa độ ô lưới và giá trị ngoài miền, thay vì chọn theo ví dụ chỉ có số dương.

Minh họa kiến trúc backend API gọn gàng cho sản phẩm nhỏ

String.replace và replaceAll: thay một lần hay mọi lần, có giữ nguyên ký tự $ không?

by Suong Nguyen
07/11/2026
0

So sánh thay chuỗi bằng pattern string và RegExp, đồng thời dùng replacer function để giữ nguyên nội dung thay thế có $&.

Minh họa kiến trúc backend API gọn gàng cho sản phẩm nhỏ

Array.map và flatMap: giữ nhóm hay ghép thành một danh sách?

by Suong Nguyen
06/11/2026
0

So sánh map và flatMap bằng dữ liệu nhóm để thấy độ sâu làm phẳng, số phần tử đầu ra và giới hạn khi callback async.

0 0 votes
Article Rating
Subscribe
Login
Notify of
guest
guest
0 Comments
Oldest
Newest Most Voted
AE Dev

AE Dev mang đến các bài viết về lập trình, mobile app, backend, frontend, WordPress và công nghệ, phù hợp cho developer muốn học hỏi và cập nhật kiến thức thực tế.

Recent Posts

  • React Native Text selectable: cho người dùng chọn và sao chép mã hiển thị
  • Phỏng vấn JavaScript: object mặc định của tham số được tạo khi nào?
  • Android runOnUiThread và Handler.post: chạy ngay hay đưa vào hàng đợi?

Categories

  • AI
  • Backend
  • Đánh giá
  • DevOps
  • Flutter
  • Hướng dẫn
  • Lập trình Mobile
  • Phỏng vấn
  • React Native
  • Uncategorized

Weekly Newsletter

  • Buy JNews
  • Support Forum
  • Pre-sale Question
  • Contact Us

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Trang chủ
  • AI
  • Mobile
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
  • Flutter

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

wpDiscuz
0
0
Would love your thoughts, please comment.x
()
x
| Reply