Đây là một giải pháp khá đơn giản. Khi so sánh các chuỗi thủ công, thực hành tốt là sử dụng localeCompare sẽ sắp xếp chính xác ngay cả khi ngôn ngữ cụ thể của ngôn ngữ của người dùng ra lệnh cho một thứ tự sắp xếp khác nhau. Nhưng chức năng đó một mình sẽ không giải quyết được vấn đề của chúng ta. Dựa trên câu trả lời thông minh của @ wZVanG, chúng tôi sẽ thay thế bất kỳ ký tự không phải từ nào, sử dụng nhóm ký tự regex \W
, ở đầu chuỗi bằng chữ cái z
, sẽ tự động sắp xếp chúng ở cuối danh sách.
Lưu ý một lỗ hổng trong trường hợp này là nếu bất kỳ từ nào của bạn bắt đầu bằng nhiều hơn z
chúng sẽ được sắp xếp sau các ký tự đặc biệt. Cách giải quyết đơn giản là thêm nhiều hơn z
s vào chuỗi, như trong return a.replace(/^\W+/, 'zzz').localeCompare(b.replace(/^\W+/, 'zzz')
.
var array = ["Banana", "Apple", "*Canana", "Blackberry", "Banana", "*Banana", "*Apple"];
array.sort(function(a,b) {
return a.replace(/^\W+/, 'z').localeCompare(b.replace(/^\W+/, 'z'));
});
Nguồn
2015-08-07 06:43:27
có thể trùng lặp của http://stackoverflow.com/questions/5503900/how-to-sort-an-array-of-objects-with-jquery-or-javascript – dpanshu
Không phải là một trùng lặp, nhưng không phải là xa ... – nageeb
Chỉ cần sử dụng chức năng gọi lại 'sort()' và thêm 'z' vào chuỗi bắt đầu bằng ký tự đặc biệt, kiểm tra câu trả lời của tôi. –