สมมติว่าเรามีอาร์เรย์ของวัตถุเช่นนี้ -
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 }
]