I have an array of object employees
{
"emp1": {
"BusinessPartnerFormattedName": "Aleksandra Lewandowski",
"EmpRoleCode": "BUP003",
"EmpRoleType": "Employee",
"EmployeeID": "E8000",
"isAssigned" : true,
"ObjectID": "00163E0E46241ED7A0EA0590D0655967"
},
"emp2": {
"BusinessPartnerFormattedName": "Aleksandra Lewandowski",
"EmpRoleCode": "BUP003",
"EmpRoleType": "Employee",
"EmployeeID": "E8000",
"isAssigned" : true,
"ObjectID": "00163E0E46241ED7A0EA0590D0655967"
},
"emp3": {
"BusinessPartnerFormattedName": "Aleksandra Lewandowski",
"EmpRoleCode": "BUP003",
"EmpRoleType": "Employee",
"EmployeeID": "E8000",
"isAssigned" : false,
"ObjectID": "00163E0E46241ED7A0EA0590D0655967"
},
"emp4": {
"BusinessPartnerFormattedName": " Lewandowski",
"EmpRoleCode": "BUP803",
"EmpRoleType": "Employee",
"EmployeeID": "BUP803",
"isAssigned" : false,
"ObjectID": "00163E0E46241ED7A0EA0590D0655967"
},
"emp5": {
"BusinessPartnerFormattedName": "Aleksandra",
"EmpRoleCode": "BUP043",
"EmpRoleType": "Employee",
"EmployeeID": "BUP043",
"isAssigned" : false,
"ObjectID": "00163E0E46241ED7A0EA0590D0655967"
},
"emp6": {
"BusinessPartnerFormattedName": "Eva Log",
"EmpRoleCode": "BUP0d03",
"EmpRoleType": "Employee",
"EmployeeID": "BUP0d03",
"isAssigned" : false,
"ObjectID": "00163E0E46241ED7A0EA0590D0655967"
}
}
I would like to put the employee where EmployeeID
is equal to E8000
first in list , than I want the employee where isAssigned
is equal to true
to follow
So far I've achieved this :
var sortedItems = _.sortBy(items, function(item) {
return (item.isAssigned === true || item.EmployeeID === "E8000") ? 0 : 1;
});
But how to make sure that the emp with EmployeeID
is equal E8000
to will always be on top ?
You chain the wanted sort order.
var array = [
{ name: "E8000 true", EmployeeID: "E8000", isAssigned : true },
{ name: "E8000 true", EmployeeID: "E8000", isAssigned : true },
{ name: "E8003 false", EmployeeID: "E8003", isAssigned : false },
{ name: "E8001 true", EmployeeID: "E8001", isAssigned : true },
{ name: "E8002 true", EmployeeID: "E8002", isAssigned : true },
{ name: "E8001 false", EmployeeID: "E8001", isAssigned : false }
];
array.sort((a, b) =>
(b.EmployeeID === 'E8000') - (a.EmployeeID === 'E8000') ||
b.isAssigned - a.isAssigned
);
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
With lodash
var array = [
{ name: "E8000 true", EmployeeID: "E8000", isAssigned : true },
{ name: "E8000 true", EmployeeID: "E8000", isAssigned : true },
{ name: "E8003 false", EmployeeID: "E8003", isAssigned : false },
{ name: "E8001 true", EmployeeID: "E8001", isAssigned : true },
{ name: "E8002 true", EmployeeID: "E8002", isAssigned : true },
{ name: "E8001 false", EmployeeID: "E8001", isAssigned : false }
];
console.log(_.sortBy(array, [
o => o.EmployeeID !== 'E8000',
o => !o.isAssigned
]));
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>