Sắp xếp mảng JavaScript

sort() Phương pháp này là một trong những phương pháp mạnh mẽ nhất của mảng.

Sắp xếp mảng

sort() Phương pháp sắp xếp mảng theo thứ tự alphabet:

Mô hình

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

Thử ngay

Đảo ngược mảng

reverse() Phương pháp này sẽ đảo ngược phần tử trong mảng.

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

Mô hình

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // Sắp xếp phần tử trong fruits
fruits.reverse();         // Đảo ngược thứ tự phần tử

Thử ngay

Sắp xếp số

Mặc địnhsort() Hàm sắp xếp theochuỗithứ tự để sắp xếp giá trị.

Hàm này rất phù hợp với chuỗi ("Apple" sẽ đứng trước "Banana").

Mặc dù vậy, nếu số theo thứ tự chuỗi, "25" lớn hơn "100" vì "2" lớn hơn "1".

Vì vậysort() Phương pháp này sẽ tạo ra kết quả không chính xác khi sắp xếp số liệu.

Chúng ta thông qua mộtHàm so sánh比值Để sửa lỗi này:

Mô hình

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

Thử ngay

Sử dụng kỹ thuật tương tự để sắp xếp mảng theo thứ tự giảm dần:

Mô hình

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

Thử ngay

Hàm so sánh比值

Mục đích của hàm so sánh là định nghĩa thứ tự sắp xếp khác.

Hàm so sánh nên trả về một giá trị âm, bằng hoặc dương, tùy thuộc vào tham số:

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

Khi sort() Khi hàm so sánh hai giá trị, nó sẽ gửi giá trị đến hàm so sánh và sắp xếp các giá trị dựa trên giá trị trả về (âm, bằng hoặc dương).

Ví dụ:

Khi so sánh 40 và 100 khisort() Phương pháp sẽ gọi hàm so sánh function(40,100).

Hàm này tính toán 40-100, sau đó trả về -60 (giá trị âm).

Hàm sắp xếp sẽ sắp xếp 40 thành giá trị thấp hơn 100.

Bạn có thể sử dụng đoạn mã sau để kiểm tra việc sắp xếp số và chữ cái:

<button onclick="myFunction1()">Sắp xếp theo thứ tự chữ cái</button>
<button onclick="myFunction2()">Sắp xếp theo thứ tự 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>

Thử ngay

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

Mô hình

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

Thử ngay

Tìm giá trị lớn nhất (hoặc thấp nhất) của mảng

JavaScript không cung cấp hàm trong xây dựng để tìm giá trị lớn nhất hoặc nhỏ nhất trong mảng.

Tuy nhiên, sau khi sắp xếp mảng, bạn có thể sử dụng chỉ số để lấy giá trị cao nhất hoặc thấp nhất.

sắp xếp tăng dần:

Mô hình

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// bây giờ points[0] chứa giá trị thấp nhất
// mà points[points.length-1] chứa giá trị cao nhất

Thử ngay

sắp xếp giảm dần:

Mô hình

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ị cao nhất
// mà points[points.length-1] chứa giá trị thấp nhất

Thử ngay

Nếu bạn chỉ cần tìm giá trị cao nhất hoặc thấp nhất, việc sắp xếp toàn bộ mảng là phương pháp rất kém hiệu quả.

sử dụng Math.max() cho mảng

Bạn có thể sử dụng Math.max.apply để tìm giá trị cao nhất trong mảng:

Mô hình

function myArrayMax(arr) {
    return Math.max.apply(null, arr);
}

Thử ngay

Math.max.apply([1, 2, 3]) bằng Math.max(1, 2, 3).

sử dụng Math.min() cho mảng

Bạn có thể sử dụng Math.min.apply để tìm giá trị thấp nhất trong mảng:

Mô hình

function myArrayMin(arr) {
    return Math.min.apply(null, arr);
}

Thử ngay

Math.min.apply([1, 2, 3]) bằng Math.min(1, 2, 3).

các phương pháp Min / Max JavaScript của tôi

phương pháp giải quyết nhanh nhất là sử dụng phương pháp "tự làm".

hàm này sẽ duyệt qua mảng, so sánh giá trị cao nhất mà nó tìm thấy với mỗi giá trị:

thực hành (tìm Max)

function myArrayMax(arr) {
    var len = arr.length
    var max = -Infinity;
    while (len--) {
        if (arr[len] > max) {
            max = arr[len];
        }
    }
    return max;
}

Thử ngay

hàm này sẽ duyệt qua mảng, so sánh giá trị thấp nhất mà nó tìm thấy với mỗi giá trị:

thực hành (tìm Min)

function myArrayMin(arr) {
    var len = arr.length
    var min = Infinity;
    while (len--) {
        if (arr[len] < min) {
            min = arr[len];
        }
    }
    return min;
}

Thử ngay

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

JavaScript mảng thường chứa các đối tượng:

Mô hình

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

Dù đối tượng có thuộc tính dữ liệu loại khác nhausort() Cách này vẫn có thể được sử dụng để sắp xếp mảng.

Giải pháp là thông qua hàm so sánh để so sánh giá trị thuộc tính:

Mô hình

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

Thử ngay

So sánh thuộc tính chuỗi sẽ phức tạp hơn:

Mô hình

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;
});

Thử ngay