สมมติว่าเรามีอาร์เรย์ของวัตถุเช่นนี้ -
const arr = [
{ id: 1, score: 1, isCut: false, dnf: false },
{ id: 2, score: 2, isCut: false, dnf: false },
{ id: 3, score: 3, isCut: false, dnf: false },
{ id: 4, score: 4, isCut: false, dnf: false },
{ id: 5, score: 5, isCut: true, dnf: true },
{ id: 6, score: 6, isCut: true, dnf: false },
{ id: 7, score: 7, isCut: true, dnf: false },
{ id: 8, score: 8, isCut: true, dnf: false },
{ id: 9, score: 9, isCut: true, dnf: false },
{ id: 10, score: 0, isCut: false, dnf: false },
{ id: 11, score: -1, isCut: false, dnf: false },
{ id: 12, score: -2, isCut: false, dnf: true },
{ id: 13, score: -3, isCut: false, dnf: false },
{ id: 14, score: -4, isCut: false, dnf: false },
{ id: 15, score: -5, isCut: false, dnf: false },
{ id: 16, score: 10, isCut: true, dnf: false }
]; เราจะต้องจัดเรียงอาร์เรย์ข้างต้นตามเกณฑ์ต่อไปนี้ -
ถ้า dnf เป็นจริง
object goes to bottom; all dnf-objects should be sorted by score
หากเป็นเรื่องจริง
object goes to bottom, but above dnfs; all isCut-objects should be sorted by score
การพักผ่อนควรเรียงตามคะแนน ถ้าคะแนนเท่ากัน ให้เรียงตามรหัส
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const arr = [
{ id: 1, score: 1, isCut: false, dnf: false },
{ id: 2, score: 2, isCut: false, dnf: false },
{ id: 3, score: 3, isCut: false, dnf: false },
{ id: 4, score: 4, isCut: false, dnf: false },
{ id: 5, score: 5, isCut: true, dnf: true },
{ id: 6, score: 6, isCut: true, dnf: false },
{ id: 7, score: 7, isCut: true, dnf: false },
{ id: 8, score: 8, isCut: true, dnf: false },
{ id: 9, score: 9, isCut: true, dnf: false },
{ id: 10, score: 0, isCut: false, dnf: false },
{ id: 11, score: -1, isCut: false, dnf: false },
{ id: 12, score: -2, isCut: false, dnf: true },
{ id: 13, score: -3, isCut: false, dnf: false },
{ id: 14, score: -4, isCut: false, dnf: false },
{ id: 15, score: -5, isCut: false, dnf: false },
{ id: 16, score: 10, isCut: true, dnf: false }
];
const sortComplex = (arr = []) => {
arr.sort(function (a, b) {
const order = (dnf, isCut) => {
return [0, 1, 3, 2][dnf * 2 + isCut];
}
return order(a.dnf, a.isCut) - order(b.dnf, b.isCut) || b.score - a.score;
});
};
sortComplex(arr);
console.log(arr); ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
[
{ id: 4, score: 4, isCut: false, dnf: false },
{ id: 3, score: 3, isCut: false, dnf: false },
{ id: 2, score: 2, isCut: false, dnf: false },
{ id: 1, score: 1, isCut: false, dnf: false },
{ id: 10, score: 0, isCut: false, dnf: false },
{ id: 11, score: -1, isCut: false, dnf: false },
{ id: 13, score: -3, isCut: false, dnf: false },
{ id: 14, score: -4, isCut: false, dnf: false },
{ id: 15, score: -5, isCut: false, dnf: false },
{ id: 16, score: 10, isCut: true, dnf: false },
{ id: 9, score: 9, isCut: true, dnf: false },
{ id: 8, score: 8, isCut: true, dnf: false },
{ id: 7, score: 7, isCut: true, dnf: false },
{ id: 6, score: 6, isCut: true, dnf: false },
{ id: 5, score: 5, isCut: true, dnf: true },
{ id: 12, score: -2, isCut: false, dnf: true }
]