PM
Size: a a a
PM
PM
SS
PM
AM
AM
SS
DI
DI
NG
const firstElements = array.filter((item)=>item.isFirst)
const secondElements = array.filter((item)=>item.isSecond)
const elementsWithoutForcePosition = array.filter((item)=>!item.isFirst && !item.isSecond).sort((itemA, itemB)=>itemA.sortField-itemB.sortField)
return [...firstElements, ...secondElements, ...elementsWithoutForcePosition]
NG
DI
NG
NG
DI
NG
DI
IM
const a = [
{isFirst: true, sortField: 5},
{ sortField: 1},
{isSecond: true,sortField: 3},
{isSecond: true,sortField: 2},
{isFirst: true, sortField: 4},
];
const aSorted = a.sort((a, b)=> {
if (firstCompare(a, b) !== null) {
return firstCompare(a, b);
}
if (secondCompare(a, b) !== null) {
return secondCompare(a, b)
}
return fieldCompare(a, b);
});
function firstCompare(a, b) {
if (a.isFirst === b.isFirst && !a.isFirst) {
return null;
}
if (a.isFirst !== b.isFirst) {
return a.isFirst ? -1 : 1
}
return fieldCompare(a, b)
}
function secondCompare(a, b) {
if (a.isSecond === b.isSecond && !a.isSecond) {
return null;
}
if (a.isSecond !== b.isSecond) {
return a.isSecond ? -1 : 1
}
return fieldCompare(a, b)
}
function fieldCompare(a, b){
return a.sortField - b.sortField
}