Sắp xếp có làm thay đổi mảng JavaScript không?
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ượng Giới thiệu về phương thức Mảng JavaScript function compare(a,b) { // ... }Code language: JavaScript (javascript)2Phươ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ức 2 còn thay đổi vị trí của các phần tử trong mảng ban đầu 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ùng 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ự Xem xét ví dụ sau
đầu ra là
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ỗi Để 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ức 00) sẽ sử dụng hàm so sánh để xác định thứ tự của các phần tử Phần sau đây minh họa cú pháp của phương thức 2 2 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ảng 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 đó 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ánh
Hàm 05 chấp nhận hai đối số 06 và 07. Phương thức 2 sẽ sắp xếp các phần tử dựa trên giá trị trả về của hàm 05 với các quy tắc sau
Để khắc phục sự cố sắp xếp số, bạn có thể sử dụng cú pháp sau 0 đầu ra 2 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 5 Và cách sau là đơn giản nhất vì các phần tử của mảng đều là số 6 Sắp xếp một mảng các chuỗiGiả sử bạn có một mảng chuỗi có tên là 51 như sau 8 Để 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ức 2 mà không chuyển hàm so sánh như trong ví dụ sau 1 đầu ra 0 Để 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ức 2 như ví dụ sau 1 đầu ra 2 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 3 Để 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 2 4 đầu ra 5 Sắp xếp một chuỗi các ký tự không phải ASCIIPhươ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ức 2 sẽ không hoạt động chính xác. Ví dụ 6 Như bạn thấy, chuỗi 59 phải xuất hiện trước chuỗi 60 Để giải quyết vấn đề này, bạn sử dụng phương thức 61 của đối tượng 62 để so sánh các chuỗi ở một ngôn ngữ cụ thể, như thế này 7 đầu ra 8 Các phần tử của mảng 63 bây giờ theo đúng thứ tự 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ụ sau 9 Để 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ần 20 đầu ra 21 Để 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 22 đầu ra 23 Sắp xếp một mảng các đối tượng theo một thuộc tính được chỉ địnhSau đâ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. 67, 68 và 69 24 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ần 25 đầ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ì 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ính 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ư sau 26 Sắp xếp đối tượng theo thuộc tính ngày thángGiả 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ượng 85. 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ố Đây là giải pháp 27 Tối ưu hóa phương pháp function compare(a,b) { // ... }Code language: JavaScript (javascript)2 mảng JavaScriptTrê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ảng Xem ví dụ sau 28 đầu ra 29 Làm thế nào nó hoạt động
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 chức năng so sánh được thực thi. 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
Đây là giải pháp 0 đầu ra 1 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ượng Sắp xếp có làm thay đổi dữ liệu không?Sắp xếp có làm thay đổi dữ liệu không? . Yes! sort() thay đổi mảng ban đầu. Hàm filter() tạo bản sao đã lọc, giữ nguyên bản gốc.
Sắp xếp có thể thay đổi trong JavaScript không?Trong JavaScript Mảng có thể thay đổi và đồng thời, các phương thức sort() và reverse() được triển khai theo cách có thể thay đổi .
Sắp xếp JavaScript có bất biến không?Cả sắp xếp và đảo ngược đều có thể thay đổi về bản chất.
Sắp xếp mảng JavaScript có ổn định không?Chúng tôi đã đề xuất thay đổi thông số kỹ thuật giúp Array#sort ổn định và nó đã được chấp nhận. Tất cả các công cụ JavaScript chính hiện triển khai Array#sort ổn định. Đó chỉ là một điều ít phải lo lắng hơn với tư cách là nhà phát triển JavaScript |