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