2011-01-02 74 views
8

Dưới đây là các mã:Làm thế nào để sắp xếp số trong javascript cách sắp xếp

<script type="text/javascript"> 

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

var n = ["10", "5", "40", "25", "100", "1"]; 
document.write(n.sort(sortNumber)); 

</script> 

Tôi thấy điều này là w3school không có giải thích ay tất cả !! Hàm sortnumber có phải là công thức phân loại một số không? Ý nghĩa của a và b và lý do tại sao nó tồn tại? lý do tại sao sortNumber trong n.sort (sortNumber) không chỉ định bất kỳ tham số nào của a và b? Bất cứ ai có thể giải thích cho tôi không? Cảm ơn!!

Trả lời

6

Chức năng JavaScript sort() có thể hoặc không thể tham số.
Tham số sẽ là hàm - nghĩa là what function is to be used to assess which of two elements should be before the other.

Mảng n được tạo thành từ các chuỗi đại diện cho các số.
Làm một đơn giản sort() mà không có một chức năng, một thứ tự chữ cái sẽ được sử dụng: kết quả sẽ là

"1", "10", "25"... "5" 

và là không đúng.

Cung cấp chức năng, sortNumber, yêu cầu sort gọi hàm đó với hai phần tử của mảng mỗi khi thuật toán sort muốn biết mục nào trong số hai mục này trước mục kia.

Như vậy sortNumber cung cấp với hai mặt hàng, thực hiện một hoạt động numerical để trở về hoặc là

  • một giá trị âm, có nghĩa một là trước b
  • một giá trị tích cực, b là trước a
  • số không: chúng bằng nhau theo thứ tự (thứ tự không quan trọng).
+0

nhưng tôi không biết những gì a và b đại diện cho trong hàm .. – dramasea

+0

* a * và * b * là các biến lấy giá trị do hàm 'sắp xếp' cung cấp. Đây là quy ước *, bạn cung cấp tên của hàm để 'sắp xếp' và tạo hàm đó có hai tham số - bạn có thể gọi chúng là những gì bạn muốn, ví dụ: * param1 * và * param2 *. –

+0

Tôi có cảm giác rằng 'sort()' nội bộ sử dụng hàm này đệ quy; bằng không tôi không thể hiểu được cách nó hoạt động. – dotslash

0

Chức năng sắp xếp chấp nhận 2 đối số, ab và được cho là trả về một số.

  • nếu a lớn hơn b thì nó sẽ trả lại bất kỳ số dương nào.
  • nếu a nhỏ hơn b thì nó sẽ trả lại bất kỳ số âm nào.
  • nếu a là tương đương với b sau đó nó sẽ trả về 0.

a-b sản xuất số đó. Bạn cũng có thể sắp xếp lại từ khóa bằng cách sử dụng b - a thay thế. Bạn có được ý tưởng.

+0

nhưng a và b không đại diện cho bất kỳ điều gì trong mã trên – dramasea

+1

Bạn không thực sự gọi hàm 'sortNumber'. Bạn chỉ cần đưa 'sortNumber' vào' n.sort() ', và sau đó' n.sort' gọi nó cho bạn. 'n.sort', hoặc' Array.prototype.sort' hy vọng rằng hàm bạn đưa cho nó lấy 2 giá trị và trả về kết quả so sánh, như tôi đã nói ở trên. Sau đó, nó sẽ sắp xếp các mảng cho bạn. – Thai

1

Khi bạn viết n.sort(sortNumber), bạn đang đi qua các sortNumberchức năng-sort.
Bạn không gọi hàm sortNumber, vì vậy bạn không chuyển bất kỳ thông số nào.

Phương thức sort của Javascript có tham số tùy chọn: một hàm so sánh hai phần tử.
sort sẽ gọi hàm bạn vượt qua để so sánh các cặp phần tử trong mảng.
Hàm so sánh mà bạn cung cấp phải lấy hai tham số và trả lại một số cho biết số nào lớn hơn.

+0

Chức năng có phải là công thức để sắp xếp một số theo từng bước không? – dramasea

+0

Chức năng bạn vượt qua có thể là bất cứ điều gì bạn muốn. – SLaks

+0

vì vậy trong đoạn mã trên, a và b đại diện cho điều gì? – dramasea

2

Bạn cần xem xét những gì sort() tiêu thụ; sort() tiêu thụ một hàm xác định loại sắp xếp. Để đơn giản hóa:

array.sort(sortfunc) 

Vì vậy, khi bạn xác định hàm sortNumber, bạn thực sự xác định cách sắp xếp sẽ sắp xếp mảng.

Vì vậy, nếu chúng ta định nghĩa một hàm đó là cơ thể được định nghĩa là:

return a - b; 

Chúng tôi đang yêu cầu để sắp xếp theo thứ tự tăng dần

Nếu chúng ta định nghĩa một hàm với cơ thể:

return b - a; 

Chúng tôi đang yêu cầu sắp xếp theo thứ tự giảm dần

Hy vọng điều này sẽ giúp

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