2013-08-28 33 views
19

Tôi có một mảng các số điểm float:Sorting mảng các số điểm nổi

[ 82.11742562118049, 28.86823689842918, 49.61295450928224, 5.861613903793295 ] 

Sau khi chạy sort() trên mảng tôi có được điều này:

[ 28.86823689842918, 49.61295450928224, 5.861613903793295, 82.11742562118049 ] 

Chú ý cách 5.8 ... lớn hơn 49,6 ... cho JavaScript (Nút). Tại sao vậy?

Làm cách nào để sắp xếp chính xác số này?

+1

Sử dụng 'arr.sort (function (a, b) {return a-b;});'. Khi nó đứng, các giá trị đang được sắp xếp theo thứ tự bảng chữ cái. "2" xuất hiện trước "4", xuất hiện trước "5", xuất hiện trước "8" (so sánh là "chữ" đầu tiên của mỗi số ... cho đến khi chúng khớp nhau, sau đó so sánh chữ cái tiếp theo, và trên) – Ian

+1

Để tham khảo: http://www.w3schools.com/jsref/jsref_sort.asp. Theo mặc định, phương thức sắp xếp mảng của javascript sắp xếp theo thứ tự abc và tăng dần. Do đó, tại sao bạn vượt qua trong phương pháp sắp xếp được cung cấp bởi @Ian –

+0

Nói chung, không tham khảo các trường học w3 vì chúng có thể không chính xác cho nhiều thứ. – jtromans

Trả lời

30

đèo trong một chức năng sắp xếp:

[….].sort(function(a,b) { return a - b;}); 

kết quả:

[5.861613903793295, 28.86823689842918, 49.61295450928224, 82.11742562118049] 

From MDN:

Nếu compareFunction không được cung cấp, các yếu tố đều được sắp xếp bằng cách chuyển đổi chúng thành các chuỗi và so sánh chuỗi trong từ điển ("từ điển" hoặc "danh bạ điện thoại", không phải là số).

+0

dấu ngoặc đơn không khớp. – zsong

+1

@CrazyTrain - cảm ơn bạn đã chỉnh sửa. nghĩ rằng tôi đã bị mù ở đó :) – dc5

+0

cảm ơn @ dc5 !!!!! – sustainablepace

2

Chức năng sắp xếp JS được xây dựng xử lý mọi thứ dưới dạng chuỗi. Hãy thử tự làm của riêng bạn:

var numbers = new Array (82.11742562118049, 28.86823689842918, 49.61295450928224, 5.861613903793295); 

function sortFloat(a,b) { return a - b; } 

numbers.sort(sortFloat); 
+1

bạn nên sử dụng mảng chữ thay thế. '[...]', không phải 'mảng mới (...)' –

Các vấn đề liên quan