Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

การจัดเรียงอาร์เรย์ตามเกณฑ์สองเกณฑ์ใน JavaScript


ให้ต่อไปนี้เป็นอาร์เรย์ที่จะจัดเรียงตามวันที่และ isImportant อ็อบเจกต์ทั้งหมดที่มี isImportant คุณสมบัติ true อยู่ในอันดับที่สูงกว่าอ็อบเจ็กต์ใด ๆ ที่มี isImportant false และทั้งสองกลุ่มจะถูกจัดเรียงตามคุณสมบัติวันที่

ต่อไปนี้เป็นอาร์เรย์ของเรา -

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;
   }
});

ฟังก์ชันการเรียกกลับ sort() มักจะได้รับสองอาร์กิวเมนต์ กล่าวคือ a และ b ซึ่งไม่มีอะไรเลยนอกจากองค์ประกอบสองอย่างของอาร์เรย์ที่มีการเรียกใช้ sort() และฟังก์ชันเรียกกลับทำงานสำหรับแต่ละคู่ขององค์ประกอบที่เป็นไปได้ของอาร์เรย์

การคืนค่า -1 (ค่าลบใดๆ) จากการโทรกลับหมายความว่าเราจัดอันดับองค์ประกอบแรกให้สูงกว่าวินาที

การส่งคืน 1 (ค่าบวกใดๆ) จากการโทรกลับหมายความว่าเราจัดอันดับองค์ประกอบที่สองให้สูงกว่าอันดับแรก

การคืนค่า 0 จะไม่ทำให้มีการเปลี่ยนแปลง เราตรวจสอบว่า a หรือ b มีคุณสมบัติ isImportant เป็นเท็จหรือไม่ ถ้าใช่ เราจะจัดลำดับนั้นให้ต่ำกว่า มิฉะนั้น เราจะจัดอันดับตามวันที่ทรัพย์สิน

ตัวอย่าง

เรามาดูตัวอย่างฉบับสมบูรณ์กัน −

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);

ผลลัพธ์

ผลลัพธ์ของรหัสในคอนโซลจะเป็น −

[
   { 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 }
]