2012-06-28 10 views
13

Có cách nào để thực hiện việc này ra khỏi hộp với phương thức _.sortBy hoặc bất kỳ phần nào khác của thư viện không?Sắp xếp bộ sưu tập xương sống theo thứ tự abc

+7

Câu hỏi của bạn nói nhấn mạnh, nhưng bạn chấp nhận một câu trả lời từ Xương sống. Tôi đến trang này vì tôi thực sự đang tìm kiếm câu trả lời của Câu trả lời, vì vậy tiêu đề này gây hiểu nhầm. Vui lòng xem xét sửa đổi tiêu đề. –

Trả lời

10

Vì bạn đã gắn thẻ câu hỏi của mình với thẻ backbone.js, tôi giả định bạn sắp xếp một bộ sưu tập, bạn chỉ cần cung cấp chức năng comparator trên bộ sưu tập và xương sống của bạn sẽ giữ bộ sưu tập được sắp xếp.

Nếu câu hỏi của bạn là sắp xếp đặc biệt alphabeticical, tôi tin rằng đó là sắp xếp mặc định, từ các tài liệu backbone.js (tôi liên kết với nó ở trên)

chapters.comparator = function(chapter) { 
    return chapter.get("page"); 
}; 
+1

Đây thực sự chính xác là những gì tôi cần. Tôi đã không chạy vào so sánh trong các tài liệu cho đến khi bạn chỉ ra chúng. Cảm ơn rất nhiều! –

25

Ý bạn là this?

var array = [ 
    { name: "banana" }, 
    { name: "carrot" }, 
    { name: "apple" } 
]; 

var sorted = _(array).sortBy("name"); 

Tôi muốn nói nó hoạt động ra khỏi hộp.

Nếu bạn muốn sắp xếp một mảng bình thường của chuỗi, có lẽ bạn chỉ muốn sử dụng sort:

var flatArray = ["banana", "carrot", "apple"]; 

flatArray.sort(); 

Xem here. Cũng hoạt động.

Lưu ý rằng các số sortBy của Underscore trả về một mảng mới được sắp xếp, trong đó chức năng được tích hợp sẵn của JavaScript được sắp xếp theo thứ tự.

+1

Đây là một ví dụ rất hữu ích. Cảm ơn rất nhiều! – ducin

+0

_.sortBy() sẽ không hoạt động chính xác nếu bạn viết "Cà rốt" với vốn C. "Cà rốt" sẽ ở chỉ mục đầu tiên. http://jsfiddle.net/uHtUX/39/ – Andrej

+0

@Andrej "sẽ không hoạt động chính xác"? Tôi nghĩ rằng khá hợp lý khi hàm so sánh mặc định được sử dụng cho 'sortBy' sẽ theo thứ tự chữ và số chuẩn (tức là chỉ cần thử' 'a' <'A'' so với '' A '<' a'' trong bảng điều khiển web của bạn). Nếu bạn muốn sắp xếp phân biệt chữ hoa chữ thường, bạn có thể cung cấp một hàm để gọi 'toLowerCase' trên các giá trị đầu tiên, như sau: http://jsfiddle.net/uHtUX/40/ –