Computer >> Máy Tính >  >> Lập trình >> Javascript

Sắp xếp mảng theo hai tiêu chí trong JavaScript

Hãy để sau đây là mảng được sắp xếp theo ngày tháng và quan trọng. Tất cả các đối tượng với thuộc tính isImportant true xếp hạng cao hơn bất kỳ đối tượng nào có thuộc tính isImportant false và cả hai nhóm được sắp xếp theo thuộc tính date.

Sau đây là mảng của chúng tôi -

const array = [{
   id: 545,
   date: 591020824000,
   isImportant: false,
},
{
   id: 322,
   date: 591080224000,
   isImportant: false,
},
{
   id: 543,
   bdate: 591080424000,
   isImportant: true,
},
{
   id: 423,
   date: 591080225525,
   isImportant: false,
},
{
   id: 135,
   date: 591020225525,
   isImportant: true,
},
];

Sau đó, chúng ta có thể sử dụng phương pháp sắp xếp mảng như thế này để đạt được kết quả mong muốn trên mảng trên -

array.sort((a, b) => {
   if(a.isImportant && !b.isImportant){
      return -1;
   }else if(!a.isImportant && b.isImportant){
      return 1;
   }else{
      return b.date-a.date;
   }
});

Hàm gọi lại sort () thường nhận hai đối số, chẳng hạn a và b, không là hai phần tử của mảng mà trên đó sort () được gọi và hàm gọi lại chạy cho từng cặp phần tử có thể phân chia của mảng.

Trả về -1 (bất kỳ giá trị âm nào) từ lệnh gọi lại có nghĩa là chúng tôi xếp hạng phần tử đầu tiên cao hơn sau giây.

Trả về 1 (bất kỳ giá trị dương nào) từ lệnh gọi lại có nghĩa là chúng tôi xếp hạng phần tử thứ hai cao hơn phần tử đầu tiên.

Trả về 0 không có thay đổi nào. Chúng tôi kiểm tra xem bất kỳ a hoặc b nào có thuộc tính isImportant được đặt tofalse hay không, nếu có thì chúng tôi xếp hạng thuộc tính đó thấp hơn. Nếu không, chúng tôi xếp hạng chúng theo ngày tháng.

Ví dụ

Bây giờ chúng ta hãy xem ví dụ hoàn chỉnh -

const array = [{
   id: 545,
   date: 591020824000,
   isImportant: false,
},
{
   id: 322,
   date: 591080224000,
   isImportant: false,
},
{
   id: 543,
   bdate: 591080424000,
   isImportant: true,
},
{
   id: 423,
   date: 591080225525,
   isImportant: false,
},
{
   id: 135,
   date: 591020225525,
   isImportant: true,
},
];
array.sort((a, b) => {
   if(a.isImportant && !b.isImportant){
      return -1;
   }else if(!a.isImportant && b.isImportant){
      return 1;
   }else{
      return b.date-a.date;
   }
});
console.log(array);

Đầu ra

Đầu ra của mã trong bảng điều khiển sẽ là -

[
   { id: 3, date: 591080424000, isImportant: true },{ id: 5, date: 591020225525, isImportant: true },
   { id: 4, date: 591080225525, isImportant: false },{ id: 2, date: 591080224000, isImportant: false },
   { id: 1, date: 591020824000, isImportant: false }
]