Cho mảng đối tượng:
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}
];
Yêu cầu: sắp xếp mảng sao cho các phần tử có flag === false nằm trước, giữ nguyên thứ tự xuất hiện ban đầu của từng nhóm.
Kết quả mong đợi:
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}
];
Mã thực hiện
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);
Kết quả
[
{ 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 }
]