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

ผลักองค์ประกอบเฉพาะให้คงอยู่นานใน JavaScript


สมมติว่าเรามีอาร์เรย์ของวัตถุเช่นนี้ -

const arr = [
   {flag: true, other: 1},
   {flag: true, other: 2},
   {flag: false, other: 3},
   {flag: true, other: 4},
   {flag: true, other: 5},
   {flag: true, other: 6},
   {flag: false, other: 7}
];

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ดังกล่าวและจัดเรียงตามเงื่อนไขต่อไปนี้ -

  • หาก arr.flag ===false องค์ประกอบที่ตรงกันจะถูกวางไว้ก่อนในอาร์เรย์ แต่จะอยู่หลังองค์ประกอบที่ตรงกันก่อนหน้าเท่านั้น

  • องค์ประกอบที่ไม่ตรงกันจะยังคงอยู่ในลำดับเดิม

  • ลำดับของรูปลักษณ์เป็นสิ่งสำคัญ

ดังนั้น สำหรับอาร์เรย์ด้านบน ผลลัพธ์ควรเป็น −

const output = [
   {flag: false, other: 3},
   {flag: false, other: 7},
   {flag: true, other: 1},
   {flag: true, other: 2},
   {flag: true, other: 4},
   {flag: true, other: 5},
   {flag: true, other: 6}
];

ดังนั้น เรามาเขียนโค้ดสำหรับฟังก์ชันนี้กัน −

ตัวอย่าง

รหัสสำหรับสิ่งนี้จะเป็น −

const arr = [
   {flag: true, other: 1},
   {flag: true, other: 2},
   {flag: false, other: 3},
   {flag: true, other: 4},
   {flag: true, other: 5},
   {flag: true, other: 6},
   {flag: false, other: 7}
];
const sortByFlag = arr => {
   const sorter = (a, b) => {
      if(!a['flag'] && b['flag']){
         return -1;
      };
      if(a['flag'] && !b['flag']){
         return 1;
      }
      return a['other'] - b['other'];
   }
   arr.sort(sorter);
};
sortByFlag(arr);
console.log(arr);

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็น -

[
   { flag: false, other: 3 },
   { flag: false, other: 7 },
   { flag: true, other: 1 },
   { flag: true, other: 2 },
   { flag: true, other: 4 },
   { flag: true, other: 5 },
   { flag: true, other: 6 }
]