Viết chức năng sắp xếp các số trong mảng
Chào các bạn
Trong bài viết này mình sẽ hướng dẫn các bạn bài tập.
Viết chức năng sắp xếp các số trong mảng theo thứ tự tăng hoặc giảm. Bằng phương pháp tự viết và có sẵng nhé.
Bắt đầu nào
Giải thuật
Để cho các bạn dể hình dung mình sẽ viết từng ví dụ nhỏ rồi ghép nó lại thành ví dụ hoàn chỉnh nhé.
- Tạo mảng số
Đơn nhiên ở đâu cũng vậy. Chúng ta phải có dữ liệu mới làm được. Dử liệu ở đây có thể nhập hoặc từ server hoặc ở đâu đó. Ví dụ này thì dữ liệu mình tự khai báo trước cho nó.
1let arr = [1, 3, 2, 5, -1, 400, -9, 30];
Như vậy là chúng ta đã có dữ liệu. Tiếp theo chúng ta cần làm là.
- Viết chức năng
Chức năng này đơn giản chỉ là thực hiện hành động sắp xếp. Nên chúng ta viết tên chức năng theo đúng hành động nó làm nhé.
1function sapXepTang(arr) { 2 for (let i = 0; i < arr.length; i++) { 3 for (let j = 0; j < arr.length; j++) { 4 if (arr[i] < arr[j]) { 5 let bienTam = arr[i]; 6 arr[i] = arr[j]; 7 arr[j] = bienTam; 8 } 9 } 10 } 11 console.log(arr); 12}
Chức năng của chúng ta hiện tại chỉ sắp xếp và log nó luôn. Nên mình không cần phải trả về gì cả.
- Gọi chức năng
Việc gọi chức năng thì củng không có gì khó. Chỉ cần gọi như thế này.
1sapXepTang(arr);
Cuối cùng chúng ta ghép tất cả các ví dụ trên thành một ví dụ hoàn chỉnh.
Ví dụ hoàn chỉnh.
1let arr = [1, 3, 2, 5, -1, 400, -9, 30]; 2 3function sapXepTang(arr) { 4 for (let i = 0; i < arr.length; i++) { 5 for (let j = 0; j < arr.length; j++) { 6 if (arr[i] < arr[j]) { 7 let bienTam = arr[i]; 8 arr[i] = arr[j]; 9 arr[j] = bienTam; 10 } 11 } 12 } 13 console.log(arr); 14} 15 16sapXepTang(arr); // [-9, -1, 1, 2, 3, 5, 30, 400]
Hiện tại thì chức năng chúng ta gọi đã chạy và đã log ra kết quả như bạn thấy như ví dụ trên.
Bây giờ chúng ta sắp xếp giảm thì như thế nào. Không có gì khó chúng ta chỉ cần đổi dấu < ở if thành dấu > và đồng thời đổi tên chức năng lại cho nó đúng với cách mà nó đang làm.
1let arr = [1, 3, 2, 5, -1, 400, -9, 30]; 2 3function sapXepGiam(arr) { 4 for (let i = 0; i < arr.length; i++) { 5 for (let j = 0; j < arr.length; j++) { 6 if (arr[i] > arr[j]) { 7 let bienTam = arr[i]; 8 arr[i] = arr[j]; 9 arr[j] = bienTam; 10 } 11 } 12 } 13 console.log(arr); 14} 15 16sapXepGiam(arr); // [400, 30, 5, 3, 2, 1, -1, -9]
OK tất cả mọi thứ chạy như dự định nhưng đầu ra bây giờ đã khác.
Ở các ví dụ trên mình đang viết chức năng bằng cách mình làm. Đơn nhiên sẽ không thể nào bằng các phương pháp có sẵng được.
Phương pháp có sẵng
Làm việc với phương pháp có sẵng đơn nhiên sẽ ngon hơn cách chúng ta viết. Nhiệm vụ bây giờ chúng ta chỉ cần nhớ cách sài thôi.
1function sapSepTang(arr) { 2 let ketQua = arr.sort(function (a, b) { 3 if (a > b) { 4 return 1; 5 } 6 if (a < b) { 7 return -1; 8 } 9 return 0; 10 }); 11 12 console.log(ketQua); // [-9, -1, 1, 2, 3, 5, 30, 400] 13} 14 15sapSepTang(arr);
Như các bạn có thể thấy nó cũng hoạt động như ý chúng ta. Nhưng bây giờ thì nhìn có vẽ đẹp hơn.
Chúng ta cũng có thể viết như thế này cho các bạn dễ hình dung.
1function sapSepTang(arr) { 2 function callBack(a, b) { 3 if (a > b) { 4 return 1; 5 } 6 if (a < b) { 7 return -1; 8 } 9 return 0; 10 } 11 12 let ketQua = arr.sort(callBack); 13 14 console.log(ketQua); 15} 16 17sapSepTang(arr); // [-9, -1, 1, 2, 3, 5, 30, 400]
Bây giờ nhìn có vẽ tường minh hơn đúng không các bạn.
Đơn nhiên chúng ta cũng có thể viết ra chức năng của chúng ta theo cách gọi các phương pháp có sẵng như vậy.
1let arr = [1, 3, 2, 5, -1, 400, -9, 30]; 2 3function mySort(callBack) { 4 for (let i = 0; i < this.length; i++) { 5 for (let j = 0; j < this.length; j++) { 6 if (callBack(this[i], this[j])) { 7 let bienTam = this[i]; 8 this[i] = this[j]; 9 this[j] = bienTam; 10 } 11 } 12 } 13 return this; 14} 15 16Array.prototype.mySort = mySort; // Thêm nó vào nguyên mẫu 17 18function sapXepTang(arr) { 19 let ketQua = arr.mySort((a, b) => { 20 if (a < b) { 21 return true; 22 } 23 return false; 24 }); 25 console.log(ketQua); // [-9, -1, 1, 2, 3, 5, 30, 400] 26} 27 28sapXepTang(arr);
Đó chỉ là ví dụ để các bạn hình dung thôi. Rồi về sau nhiều cái hay lắm. Đơn nhiên nếu học mà biết càng nhiều thì càng tôt.
Tổng kết
Trong bài viết này mình đã hướng dẫn các bạn làm bài tập nhỏ. Các bạn chịu khó xem ví dụ nhé.
- giải thuật
- sắp xếp
- đếm
- mảng
- chuỗi
Các bài viết liên quan
Phương pháp lặp Symbol.iterator
Phương pháp lặp [Symbol.iterator]() là gì?. Cùng nhau tìm hiểu cách thức hoạt động của nó.JavascriptSắp xếp các ký tự trong chuỗi theo thứ tự tăng hoặc giảm
Áp dụng nó với phương pháp có sẵng và tự viết.Giải ThuậtViết chương trình nhập vào một số liên tục
Đến khi nào người dùng hủy bỏ hoặc nhập vào không phải là số.Giải ThuậtSymbol trong javascript
symbol là một đối tượng một nhà xây dựng trả về một giá trị nguyên thủy.JavascriptChuyển đổi đối tượng thành nguyên thủy trong javascript
Cùng nhau tìm hiểu ký hiệu chuyển đổi Symbol.toPrimitiveJavascript