JavaScript Array sort ()

Phương thức Array sort () trong JavaScript sắp xếp các mục của một mảng.

Các sort()phương pháp sắp xếp các yếu tố của một mảng được đưa ra trong một tăng dần cụ thể hoặc thứ tự giảm dần.

Cú pháp của sort()phương thức là:

 arr.sort(compareFunction)

Ở đây, arr là một mảng.

sort () Tham số

Các sort()phương pháp có trong:

  • CompareFunction (tùy chọn) - Nó được sử dụng để xác định thứ tự sắp xếp tùy chỉnh.

Trả về giá trị từ sort ()

  • Trả về mảng sau khi sắp xếp các phần tử của mảng tại chỗ (nghĩa là nó thay đổi mảng ban đầu và không có bản sao nào được thực hiện).

Ví dụ 1: Sắp xếp các phần tử của một mảng

Khi hàm so sánh không được thông qua,

  • Tất cả các undefinedphần tử không phải là mảng đầu tiên được chuyển đổi thành chuỗi.
  • Các chuỗi này sau đó được so sánh bằng cách sử dụng giá trị điểm mã UTF-16 của chúng.
  • Việc sắp xếp được thực hiện theo thứ tự tăng dần.
  • Tất cả undefinedcác phần tử được sắp xếp đến cuối mảng.
 // sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); // returns the sorted array console.log(names.sort()); // modifies the array in place console.log(names); var priceList = (1000, 50, 2, 7, 14); priceList.sort(); // Number is converted to string and sorted console.log(priceList)

Đầu ra

 ('Adam', 'Ben', 'Danil', 'Fabiano', 'Jeffrey') ('Adam', 'Ben', 'Danil', 'Fabiano', 'Jeffrey') (1000, 14, 2, 50 , 7)

Ở đây, chúng ta có thể thấy rằng mảng tên được sắp xếp theo thứ tự tăng dần của chuỗi. Ví dụ, Adam đứng trước Danil vì "A" đứng trước "D".

Vì tất cả các phần tử không phải là không xác định đều được chuyển đổi thành chuỗi trước khi sắp xếp chúng, nên các Numberkiểu dữ liệu được sắp xếp theo thứ tự đó.

Ở đây, chúng ta có thể thấy rằng mặc dù 1000 lớn hơn 50 về mặt số học, nó vẫn nằm ở đầu danh sách đã sắp xếp. Đó là bởi vì "1" <"5" .

Ví dụ 2: Sắp xếp bằng chức năng tùy chỉnh

Khi so sánh hàm được chuyển,

  • Tất cả các undefinedphần tử không phải mảng được sắp xếp theo giá trị trả về của CompareFunction.
  • Tất cả các phần tử không xác định được sắp xếp đến cuối mảng và so sánh Function không được gọi cho chúng.

Giả sử chúng ta muốn sắp xếp mảng tên ở trên sao cho tên dài nhất đứng sau cùng, thay vì sắp xếp theo thứ tự bảng chữ cái. Chúng ta có thể thực hiện theo cách sau:

 // custom sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); function len_compare(a, b)( return a.length - b.length; ) // sort according to string length names.sort(len_compare); console.log(names);

Đầu ra

 ('Ben', 'Adam', 'Danil', 'Jeffrey', 'Fabiano')

Ở đây, việc sắp xếp dựa trên logic a.length - b.length. Về cơ bản, nó có nghĩa là mục có chiều dài ngắn hơn sẽ xuất hiện ở đầu Array.

Đầu tiên chúng ta hãy hiểu cách compareFunctionhoạt động của tùy chọn .

Bất kỳ compareFunctioncó cú pháp sau:

 function (a, b)( // sorting logic // return a Number )

Các sort()phương pháp so sánh tất cả các giá trị của mảng bằng cách đi qua hai giá trị tại một thời điểm đến compareFunction. Hai tham số a và b lần lượt thể hiện hai giá trị này.

Các compareFunctionphải trả lại một Number. Giá trị trả về này được sử dụng để sắp xếp các phần tử theo cách sau:

  • Nếu giá trị trả về <0 , a được sắp xếp trước b (a đứng trước b).
  • Nếu giá trị trả về> 0 , b được sắp xếp trước a (b đứng trước a).
  • Nếu trả về giá trị == 0 , a và b không thay đổi so với nhau.

Trong ví dụ 2, chúng tôi sắp xếp mảng bằng cách sử dụng:

 function len_compare(a, b)( return a.length - b.length; )

Đây:

  • Nếu a.length - b.length <0 , a đứng trước b. Ví dụ: "Adam" đứng trước "Jeffrey" là 4 - 7 <0 .
  • Nếu a.length - b.length> 0 , b đứng trước a. Ví dụ: "Danil" đứng sau "Ben" là 5 - 3> 0.
  • Nếu a.length - b.length == 0 , vị trí của chúng không đổi. Ví dụ: vị trí tương đối của "Jeffrey" và "Fabiano" là không thay đổi vì 7 - 7 == 0 .

Chúng ta có thể thấy rằng điều này dẫn đến việc sắp xếp các chuỗi theo độ dài của chúng theo thứ tự tăng dần.

Ví dụ 3: Sắp xếp số theo kiểu số

Vì tất cả các phần tử không phải là không xác định đều được chuyển đổi thành chuỗi trước khi sắp xếp chúng, chúng tôi không thể sắp xếp các số bằng giá trị số của chúng theo mặc định.

Hãy xem cách chúng ta có thể triển khai điều này bằng cách sử dụng một hàm tùy chỉnh.

 // numeric sorting // define array var priceList = (1000, 50, 2, 7, 14); // sort() using function expression // ascending order priceList.sort(function (a, b) ( return a - b; )); // Output: Ascending - 2,7,14,50,1000 console.log("Ascending - " + priceList); // sort() using arrow function expression // descending order priceList.sort((a, b) => b - a); // Output: Descending - 1000,50,14,7,2 console.log("Descending - " + priceList);

Đầu ra

 Tăng dần - 2,7,14,50,1000 Giảm dần - 1000,50,14,7,2

Trong ví dụ này, chúng tôi sắp xếp mảng bằng cách sử dụng:

 function (a, b) ( return a - b; )

Đây,

  • Nếu a - b <0 thì a đứng trước b. Ví dụ: 2 đứng trước 7 là 2 - 7 <0 .
  • Nếu a - b> 0 thì b đứng trước a. Ví dụ: 1000 đứng sau 50 là 1000 - 50> 0.

Chúng ta có thể thấy rằng điều này dẫn đến việc sắp xếp các số theo giá trị số tăng dần của chúng.

Tương tự, chúng ta có thể sử dụng b - ađể sắp xếp chúng theo thứ tự giảm dần. Lưu ý rằng chúng ta cũng có thể sử dụng biểu thức hàm mũi tên được định nghĩa trong ES2015.

Chúng ta cũng có thể đảo ngược (thứ tự giảm dần) mảng đã sắp xếp bằng cách sử dụng reverse()phương thức mảng có sẵn . Để tìm hiểu thêm, hãy truy cập JavaScript Array reverse ().

thú vị bài viết...