Latest Post

Tăng thứ hạng và truy cập tự nhiên với 10 phương pháp SEO hay nhất Kiếm Tiền Online (mmo): Khái Niệm và Các Hình Thức Phổ Biến

Làm việc với mảng là một trong những nhiệm vụ phổ biến nhất trong lập trình. Tôi đã chia sẻ nhiều bài viết về cách làm việc hiệu quả với mảng hoặc các mẹo và thủ thuật liên quan.

Trong bài viết này, tôi muốn giới thiệu về cách sắp xếp các phần tử trong mảng theo thứ tự tăng dần hoặc giảm dần.

Một vấn đề mà bạn có thể nhận thấy là việc sắp xếp tăng dần hoặc giảm dần theo tiêu chí nào? Nếu mảng chỉ chứa các số hoặc chuỗi, thì việc này khá đơn giản. Tuy nhiên, nếu mảng bao gồm các đối tượng, thì sao?

Chúng ta sẽ cùng nhau khám phá điều này trong bài viết dưới đây.

Sắp xếp mảng có phần tử là số, String

Chúng ta vào bài toán đơn giản trước nhé. Giả sử, chúng ta có một mảng sau:

  • const numArray = [9, 5, 3, 2, 8, 6, 1]

Để sắp xếp mảng này, chúng ta có thể sử dụng hàm có sẵn của JS là hàm sort(). Mặc định, hàm sort() chỉ sắp xếp các phần tử theo bảng chữ cái. Do đó, để sắp xếp các số thì cần truyền vào một function so sánh để xác định quy tắc sắp xếp.

  • const numArray = [9, 5, 3, 2, 8, 6, 1]
  • // Sắp xếp tăng dần
  • numArray.sort((a, b) => a – b);
  • console.log(numArray);
  • // in ra: [1, 2, 3, 5, 6, 8, 9]

Như ở trên, để sắp xếp tăng dần thì quy tắc là số ở phía sau lớn hơn phía trước, do đó, (a - b) > 0 và trả về true. Ngược lại, để sắp xếp giảm dần, bạn đảo chiều thành (b-a) là được.

Hàm sort() sẽ tác động trực tiếp vào mảng, biến đổi thứ tự của mảng chứ không clone ra mảng mới.

Lưu ý: Mảng cần sắp xếp không nên chứa các phần tử là Infinity hoặc NaN ( Vì Infinity – Infinity là NaN chứ không phài là số 0 – nên không so sánh được)

Sắp xếp mảng có phần tử là Object

Khi làm việc với mảng chứa các đối tượng, quá trình sắp xếp trở nên phức tạp hơn một chút. Không phải vì kỹ thuật sắp xếp khó khăn mà là do cách chúng ta hiểu về việc nào là lớn hơn, nào là nhỏ hơn.

Trước khi thực hiện bất kỳ so sánh nào, chúng ta cần xác định rõ tiêu chí cụ thể cho quá trình sắp xếp.

Ví dụ, khi so sánh giữa hai người, không thể đơn giản khẳng định rằng Người A tốt hơn Người B mà không xác định được thuộc tính cụ thể. Người A có thể cao và lớn hơn Người B, nhưng có thể Người A lại có một đặc điểm khác mà chúng ta quan trọng hơn.

Vậy nên, để sắp xếp mảng chứa các đối tượng, bạn cần đặt ra câu hỏi: “Chúng ta sắp xếp dựa trên thuộc tính nào?”. Điều này sẽ giúp xác định được tiêu chí cụ thể trong hàm so sánh.

Giả sử, bạn có mảng cần sắp xếp tăng dần theo độ tuổi: ai lớn tuổi lên trước – ưu tiên người già:

  • const persons = [
  • { name: ‘Kiều Phong’, age: 30, height: 170},
  • { name: ‘Lý Quỳ’, age: 45, height: 150},
  • { name: ‘Dương Tiễn’, age: 35, height: 180},
  • ];
  • function compare(a, b) {
  • return b.age – a.age;
  • }
  • console.log(persons.sort(compare))
  • // in ra: [{ name: ‘Lý Quỳ’, age: 45, height: 150},{ name: ‘Dương Tiễn’, age: 35, height: 180}, { name: ‘Kiều Phong’, age: 30, height: 170}]

Cũng đơn giản phải không?

Nếu bạn sử dụng thư viện Lodash thì còn dễ hơn nữa. Bạn chỉ cần phải truyền vào thuộc tính cần so sánh, khỏi cần viết hàm so sánh luôn.

  • const persons = [
  • { name: ‘Kiều Phong’, age: 30, height: 170},
  • { name: ‘Lý Quỳ’, age: 45, height: 150},
  • { name: ‘Dương Tiễn’, age: 35, height: 180},
  • ];
  • var sortedPersons = _.orderBy(persons, [‘age’], [‘desc’]);
  • console.log(sortedPersons);

Cú pháp sắp xếp của Lodash:

  • _.orderBy(collection, iteratees, orders)

Dưới đây là một số phương pháp đơn giản để sắp xếp một mảng. Nếu bạn có bất kỳ cách nào tốt hơn, hãy chia sẻ nó trong phần bình luận để mọi người cùng học hỏi.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *