Bản tóm tắt. trong hướng dẫn này, bạn sẽ học cách sử dụng phương thức Array
2 của JavaScript để sắp xếp các mảng số, chuỗi và đối tượngCode language: JavaScript [javascript]
function compare[a,b] { // ... }
Giới thiệu về phương thức Mảng JavaScript function compare[a,b] {
// ...
}
Code language: JavaScript [javascript]
2
function compare[a,b] {
// ...
}
Phương thức
2 cho phép bạn sắp xếp các phần tử của mảng tại chỗ. Ngoài việc trả về mảng đã sắp xếp, phương thứcCode language: JavaScript [javascript]
function compare[a,b] { // ... }
2 còn thay đổi vị trí của các phần tử trong mảng ban đầuCode language: JavaScript [javascript]
function compare[a,b] { // ... }
Theo mặc định, phương thức
2 sắp xếp các phần tử mảng theo thứ tự tăng dần với giá trị nhỏ nhất trước và giá trị lớn nhất sau cùngCode language: JavaScript [javascript]
function compare[a,b] { // ... }
Phương thức
2 chuyển các phần tử thành chuỗi và so sánh các chuỗi để xác định thứ tựCode language: JavaScript [javascript]
function compare[a,b] { // ... }
Xem xét ví dụ sau
Code language: JavaScript [javascript]
let numbers = [0, 1 , 2, 3, 10, 20, 30 ]; numbers.sort[]; console.log[numbers];
đầu ra là
Code language: JSON / JSON with Comments [json]
[ 0, 1, 10, 2, 20, 3, 30 ]
Trong ví dụ này, phương thức
2 đặt 10 trước 2 vì chuỗi “10” đứng trước “2” khi thực hiện so sánh chuỗiCode language: JavaScript [javascript]
function compare[a,b] { // ... }
Để khắc phục điều này, bạn cần truyền một hàm so sánh cho phương thức
2. Phương thứcCode language: JavaScript [javascript]
function compare[a,b] { // ... }
00] sẽ sử dụng hàm so sánh để xác định thứ tự của các phần tửCode language: JavaScript [javascript]
function compare[a,b] { // ... }
Phần sau đây minh họa cú pháp của phương thức
2Code language: JavaScript [javascript]
function compare[a,b] { // ... }
2Code language: JavaScript [javascript]
function compare[a,b] { // ... }
Phương thức
2 chấp nhận một đối số tùy chọn là hàm so sánh hai phần tử của mảngCode language: JavaScript [javascript]
function compare[a,b] { // ... }
Nếu bạn bỏ qua hàm so sánh, thì phương thức
2 sẽ sắp xếp các phần tử theo thứ tự sắp xếp dựa trên giá trị điểm mã Unicode của các phần tử như đã đề cập trước đóCode language: JavaScript [javascript]
function compare[a,b] { // ... }
Hàm so sánh của phương thức
2 chấp nhận hai đối số và trả về một giá trị xác định thứ tự sắp xếp. Sau đây minh họa cú pháp của hàm so sánhCode language: JavaScript [javascript]
function compare[a,b] { // ... }
Code language: JavaScript [javascript]
function compare[a,b] { // ... }
Hàm
05 chấp nhận hai đối sốCode language: JavaScript [javascript]
function compare[a,b] { // ... }
06 vàCode language: JavaScript [javascript]
function compare[a,b] { // ... }
07. Phương thứcCode language: JavaScript [javascript]
function compare[a,b] { // ... }
2 sẽ sắp xếp các phần tử dựa trên giá trị trả về của hàmCode language: JavaScript [javascript]
function compare[a,b] { // ... }
05 với các quy tắc sauCode language: JavaScript [javascript]
function compare[a,b] { // ... }
- Nếu
20 nhỏ hơn 0, phương thức
Code language: JavaScript [javascript]function compare[a,b] { // ... }
2 sắp xếp
Code language: JavaScript [javascript]function compare[a,b] { // ... }
06 thành chỉ số thấp hơnfunction compare[a,b] { // ... }
07. Nói cách khác,
Code language: JavaScript [javascript]function compare[a,b] { // ... }
06 sẽ đến trước
Code language: JavaScript [javascript]function compare[a,b] { // ... }
- Nếu
20 lớn hơn 0, phương thức
Code language: JavaScript [javascript]function compare[a,b] { // ... }
2 sắp xếp
Code language: JavaScript [javascript]function compare[a,b] { // ... }
07 thành chỉ số thấp hơn
Code language: JavaScript [javascript]function compare[a,b] { // ... }
06, i. e. , b sẽ đến trước
Code language: JavaScript [javascript]function compare[a,b] { // ... }
- Nếu
20 trả về 0, phương thức
Code language: JavaScript [javascript]function compare[a,b] { // ... }
2 coi a bằng b và giữ nguyên vị trí của chúng
Code language: JavaScript [javascript]function compare[a,b] { // ... }
Để khắc phục sự cố sắp xếp số, bạn có thể sử dụng cú pháp sau
0Code language: JavaScript [javascript]
function compare[a,b] { // ... }
đầu ra
2Code language: JavaScript [javascript]
function compare[a,b] { // ... }
Hoặc bạn có thể xác định hàm so sánh bằng cú pháp hàm mũi tên
5Code language: JavaScript [javascript]
function compare[a,b] { // ... }
Và cách sau là đơn giản nhất vì các phần tử của mảng đều là số
6Code language: JavaScript [javascript]
function compare[a,b] { // ... }
Sắp xếp một mảng các chuỗi
Giả sử bạn có một mảng chuỗi có tên là
51 như sauCode language: JavaScript [javascript]
function compare[a,b] { // ... }
8Code language: JavaScript [javascript]
function compare[a,b] { // ... }
Để sắp xếp các phần tử của mảng
51 theo thứ tự bảng chữ cái tăng dần, bạn sử dụng phương thứcCode language: JavaScript [javascript]
function compare[a,b] { // ... }
2 mà không chuyển hàm so sánh như trong ví dụ sauCode language: JavaScript [javascript]
function compare[a,b] { // ... }
1Code language: JavaScript [javascript]
function compare[a,b] { // ... }
đầu ra
0Code language: JSON / JSON with Comments [json]
[ 0, 1, 10, 2, 20, 3, 30 ]
Để sắp xếp mảng
51 theo thứ tự giảm dần, bạn cần thay đổi logic của hàm so sánh và chuyển nó sang phương thứcCode language: JavaScript [javascript]
function compare[a,b] { // ... }
2 như ví dụ sauCode language: JavaScript [javascript]
function compare[a,b] { // ... }
1Code language: JSON / JSON with Comments [json]
[ 0, 1, 10, 2, 20, 3, 30 ]
đầu ra
2Code language: JSON / JSON with Comments [json]
[ 0, 1, 10, 2, 20, 3, 30 ]
Giả sử bạn có một mảng chứa các phần tử cả chữ hoa và chữ thường như sau
3Code language: JSON / JSON with Comments [json]
[ 0, 1, 10, 2, 20, 3, 30 ]
Để sắp xếp mảng này theo thứ tự bảng chữ cái, bạn cần sử dụng hàm so sánh tùy chỉnh để chuyển đổi tất cả các phần tử thành cùng một trường hợp e. g. , viết hoa để so sánh và truyền hàm đó cho phương thức
2Code language: JavaScript [javascript]
function compare[a,b] { // ... }
4Code language: JSON / JSON with Comments [json]
[ 0, 1, 10, 2, 20, 3, 30 ]
đầu ra
5
[ 0, 1, 10, 2, 20, 3, 30 ]
Code language: JSON / JSON with Comments [json]
Sắp xếp một chuỗi các ký tự không phải ASCII
Phương pháp
2 đang hoạt động tốt với các chuỗi có ký tự ASCII. Tuy nhiên, đối với các chuỗi có ký tự không phải ASCII e. g. , é, è, v.v. , phương thứcCode language: JavaScript [javascript]
function compare[a,b] { // ... }
2 sẽ không hoạt động chính xác. Ví dụCode language: JavaScript [javascript]
function compare[a,b] { // ... }
6Code language: JSON / JSON with Comments [json]
[ 0, 1, 10, 2, 20, 3, 30 ]
Như bạn thấy, chuỗi
59 phải xuất hiện trước chuỗiCode language: JavaScript [javascript]
function compare[a,b] { // ... }
60Code language: JavaScript [javascript]
function compare[a,b] { // ... }
Để giải quyết vấn đề này, bạn sử dụng phương thức
61 của đối tượngCode language: JavaScript [javascript]
function compare[a,b] { // ... }
62 để so sánh các chuỗi ở một ngôn ngữ cụ thể, như thế nàyCode language: JavaScript [javascript]
function compare[a,b] { // ... }
7Code language: JSON / JSON with Comments [json]
[ 0, 1, 10, 2, 20, 3, 30 ]
đầu ra
8Code language: JSON / JSON with Comments [json]
[ 0, 1, 10, 2, 20, 3, 30 ]
Các phần tử của mảng
63 bây giờ theo đúng thứ tựCode language: JavaScript [javascript]
function compare[a,b] { // ... }
Sắp xếp một dãy số
Giả sử bạn có một dãy số có tên là
64 như trong ví dụ sauCode language: JavaScript [javascript]
function compare[a,b] { // ... }
9Code language: JSON / JSON with Comments [json]
[ 0, 1, 10, 2, 20, 3, 30 ]
Để sắp xếp một mảng các số theo dạng số, bạn cần chuyển vào một hàm so sánh tùy chỉnh để so sánh hai số
Ví dụ sau sắp xếp mảng
64 theo số thứ tự tăng dầnCode language: JavaScript [javascript]
function compare[a,b] { // ... }
20Code language: JavaScript [javascript]
function compare[a,b] { // ... }
đầu ra
21Code language: JavaScript [javascript]
function compare[a,b] { // ... }
Để sắp xếp một dãy số theo thứ tự giảm dần, bạn chỉ cần đảo ngược logic trong hàm so sánh như minh họa trong ví dụ sau
22Code language: JavaScript [javascript]
function compare[a,b] { // ... }
đầu ra
23Code language: JavaScript [javascript]
function compare[a,b] { // ... }
Sắp xếp một mảng các đối tượng theo một thuộc tính được chỉ định
Sau đây là một mảng gồm các đối tượng
66, trong đó mỗi đối tượng chứa ba thuộc tính.Code language: JavaScript [javascript]
function compare[a,b] { // ... }
67,Code language: JavaScript [javascript]
function compare[a,b] { // ... }
68 vàCode language: JavaScript [javascript]
function compare[a,b] { // ... }
69Code language: JavaScript [javascript]
function compare[a,b] { // ... }
24Code language: JavaScript [javascript]
function compare[a,b] { // ... }
Sắp xếp các đối tượng theo thuộc tính số
Ví dụ sau đây cho thấy cách sắp xếp các nhân viên theo
68 theo thứ tự tăng dầnCode language: JavaScript [javascript]
function compare[a,b] { // ... }
25Code language: JavaScript [javascript]
function compare[a,b] { // ... }
đầu ra
Ví dụ này tương tự như ví dụ về sắp xếp một dãy số theo thứ tự tăng dần. Sự khác biệt là nó so sánh thuộc tính
68 của hai đối tượng thay vìCode language: JavaScript [javascript]
function compare[a,b] { // ... }
Sắp xếp các đối tượng theo thuộc tính chuỗi
Để sắp xếp mảng
82 theo thuộc tínhCode language: JavaScript [javascript]
function compare[a,b] { // ... }
67 không phân biệt chữ hoa chữ thường, bạn chuyển hàm so sánh so sánh hai chuỗi không phân biệt chữ hoa chữ thường như sauCode language: JavaScript [javascript]
function compare[a,b] { // ... }
26Code language: JavaScript [javascript]
function compare[a,b] { // ... }
Sắp xếp đối tượng theo thuộc tính ngày tháng
Giả sử, bạn muốn sắp xếp nhân viên dựa trên ngày thuê của từng nhân viên
Dữ liệu ngày thuê được lưu trữ trong thuộc tính
69 của đối tượng nhân viên. Tuy nhiên, nó chỉ là một chuỗi đại diện cho một ngày hợp lệ, không phải đối tượngCode language: JavaScript [javascript]
function compare[a,b] { // ... }
85.Code language: JavaScript [javascript]
function compare[a,b] { // ... }
Do đó, để sắp xếp nhân viên theo ngày thuê, trước tiên bạn phải tạo một đối tượng
85 hợp lệ từ chuỗi ngày, sau đó so sánh hai ngày, giống như so sánh hai sốCode language: JavaScript [javascript]
function compare[a,b] { // ... }
Đây là giải pháp
27Code language: JavaScript [javascript]
function compare[a,b] { // ... }
Tối ưu hóa phương pháp function compare[a,b] {
// ...
}
Code language: JavaScript [javascript]
2 mảng JavaScript
function compare[a,b] {
// ...
}
Trên thực tế, phương thức
2 gọi hàm so sánh nhiều lần cho mỗi phần tử trong mảngCode language: JavaScript [javascript]
function compare[a,b] { // ... }
Xem ví dụ sau
28Code language: JavaScript [javascript]
function compare[a,b] { // ... }
đầu ra
29Code language: JavaScript [javascript]
function compare[a,b] { // ... }
Làm thế nào nó hoạt động
- Đầu tiên, khai báo một mảng
89 bao gồm các tên sông nổi tiếng
Code language: JavaScript [javascript]function compare[a,b] { // ... }
- Thứ hai, sắp xếp mảng
89 theo độ dài phần tử của nó bằng phương thức
Code language: JavaScript [javascript]function compare[a,b] { // ... }
2. Chúng tôi xuất các phần tử của mảng
Code language: JavaScript [javascript]function compare[a,b] { // ... }
89 sang bảng điều khiển web bất cứ khi nào phương thức
Code language: JavaScript [javascript]function compare[a,b] { // ... }
2 gọi hàm so sánh
Code language: JavaScript [javascript]function compare[a,b] { // ... }
Như thể hiện trong đầu ra ở trên, mỗi phần tử đã được đánh giá nhiều lần. g. , Amazon 4 lần, Congo 2 lần, v.v.
Nếu số lượng phần tử mảng ngày càng tăng, nó sẽ có khả năng làm giảm hiệu suất
Bạn không thể giảm số lần thực hiện chức năng so sánh. Tuy nhiên, bạn có thể giảm bớt công việc so sánh phải làm. Kỹ thuật này được gọi là Biến đổi Schwartzian
Để triển khai điều này, bạn hãy làm theo các bước sau
- Đầu tiên, trích xuất các giá trị thực tế thành một mảng tạm thời bằng phương thức map[]
- Thứ hai, sắp xếp mảng tạm thời với các phần tử đã được đánh giá [hoặc chuyển đổi]
- Thứ ba, đi bộ mảng tạm thời để có được một mảng với đúng thứ tự
Đây là giải pháp
0Code language: JavaScript [javascript]
function compare[a,b] { // ... }
đầu ra
1Code language: JavaScript [javascript]
function compare[a,b] { // ... }
Trong hướng dẫn này, bạn đã học cách sử dụng phương thức Array
2 của JavaScript để sắp xếp các mảng chuỗi, số, ngày tháng và đối tượngCode language: JavaScript [javascript]
function compare[a,b] { // ... }