Categories JavaScript

Sắp xếp mảng trong JavaScript

Phương thức sort() là một trong các phương thức mạnh nhất của mảng.

Sắp xếp một Mảng

Phương thức sort() sắp xếp mảng thao thứ tự abc:

Ví dụ

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();  // Sắp xếp các phần tử của fruits 

Kết quả: Apple,Banana,Mango,Orange


Đảo ngược quá trình sắp xếp một Mảng

Phương thức reverse() đảo ngược các phần tử trong mảng – nó là ngược lại phương thức sort().

Bạn có thể sử dụng để sắp xếp một mảng theo thứ tự giảm dần:

Ví dụ

var fruits = ["Banana", "Orange", "Apple", "Mango"];
 fruits.sort();   // Sắp xếp các phần tử của fruits 
 fruits.reverse();  // Sắp xếp theo thứ tự ngược lại của các phần tử 

Kết quả: Orange,Mango,Banana,Apple


Sắp xếp các con số

Theo mặc định, hàm sort() sắp xếp các giá trị như chuỗi.

Điều đó làm việc tốt cho chuỗi (“Apple” ở trước “Banana”).

Tuy vậy, nếu các con số được lưu trong chuỗi, “25” lại lớn hơn “100”, bởi vì “2” lớn hơn “1”.

Vì lý do đó, phương thức sort() sẽ tạo ra các kết quả lỗi khi sắp xếp các số.

Bạn có thể sửa bằng cách cung cấp một chức năng so sánh:

Ví dụ

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});

Cũng sử dụng mẹo này để sắp xếp các con số trong mảng theo chiều giảm dần:

Ví dụ

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});

Các hàm so sánh

Mục đích của chức năng so sánh là định nghĩa sắp xếp thay thế.

Các hàm so sánh phải trả về giá trị âm, zero hoặc giá trị dương, phụ thuộc vào đối số:

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

Khi hàm sort() so sánh hai giá trị, nó sẽ gửi giá trị tới hàm so sánh và sắp xếp theo giá trị kết quả trả về (âm, zero, dương).

Ví dụ:

Khi so sánh 40 và 100, phương thức sort() gọi hàm so sánh function(40,100).

Hàm tính toán 40 – 100, và trả về kết quả -60 (giá trị âm).

Hàm sắp xếp sẽ sắp xếp 40 nhỏ hơn 100.

Bạn có thể sử dụng đoạn mã này để thử nghiệm với sắp xếp kiểu số và kiểu thứ tự abc.

<button onclick="myFunction1()">Sắp xếp theo thứ tự ABC</button>
<button onclick="myFunction2()">Sắp xếp theo kiểu số</button>

<p id="demo"></p>

<script>
 var points = [40, 100, 1, 5, 25, 10];
 document.getElementById("demo").innerHTML = points;

function myFunction1() {
 points.sort();
 document.getElementById("demo").innerHTML = points;
 }

function myFunction2() {
 points.sort(function(a, b){return a - b});
 document.getElementById("demo").innerHTML = points;
 }
 </script>

Sắp xếp một mảng theo thứ tự ngẫu nhiên

Ví dụ

var points = [40, 100, 1, 5, 25, 10];
 points.sort(function(a, b){return 0.5 - Math.random()});

Tìm giá trị lớn nhất (hoặc nhỏ nhất)

Làm thế nào để tìm giá trị lớn nhất trong một mảng?

Ví dụ

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});

// bây giờ points[0] chứa giá trị lớn nhất

Và giá trị nhỏ nhất:

Ví dụ

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});

// bây giờ point[0] chứa giá trị nhỏ nhất


Sắp xếp đối tượng trong mảng

Mảng trong JavaScript thường bao gồm các đối tượng:

Ví dụ

var cars = [
 {type:"Volvo", year:2016},
 {type:"Saab", year:2001},
 {type:"BMW", year:2010}];

Thậm chí nếu đối tượng có thuộc tính của dạng dữ liệu khác, phương thức sort() có thể sử dụng để sắp xếp mảng.

Giải pháp là viết hàm so sánh để so sánh các giá trị của thuộc tính:

Ví dụ

cars.sort(function(a, b){return a.year - b.year});

So sánh thuộc tính chuỗi đỡ phức tạp hơn một chút:

Ví dụ

cars.sort(function(a, b){
 var x = a.type.toLowerCase();
 var y = b.type.toLowerCase();
 if (x < y) {return -1;}
 if (x > y) {return 1;}
 return 0;
 });
Back to Top