javascript - Lodash - 将对象移动到数组中的第一位而不是按另一个属性排序
问题描述
我有一组对象员工
{
"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"
}
}
我想把EmployeeID
等于E8000
第一个的员工放在列表中,而不是让isAssigned
等于的员工true
跟随
到目前为止,我已经实现了这一点:
var sortedItems = _.sortBy(items, function(item) {
return (item.isAssigned === true || item.EmployeeID === "E8000") ? 0 : 1;
});
但是如何确保EmployeeID
等于等于的 empE8000
总是在最前面呢?
解决方案
不知道为什么你需要 lodash :
items.sort((a,b)=>{
if(a.EmployeeID !== b.EmployeeID){
if(a.EmployeeID === 'E8000') return -1;
if(b.EmployeeID === 'E8000') return 1;
};
if(a.isAssigned !== b.isAssigned){
return a.isAssigned ? -1 : 1;
}
//Remaining sort logic...
})
这转化为:
“在决定是否a
或b
应该先出现时,如果a
和b
不都具有相同的 EmployeeID 值,请检查是否有任何一个具有 value E8000
。如果 ether 确实具有该值,则将其放在第一个。
否则,检查a
和b
是否具有相同的值isAssigned
,如果没有,则将具有值的那个true
放在第一位isAssigned
。
最后,如果不满足先前的条件,请遵循您想要设置的任何逻辑,哪个应该先行。
当然,您必须填写之后想要的任何排序逻辑。例如,如果您想在 上按字母顺序排序BusinessPartnerFormattedName
,您将使用以下内容填充该Remaining sort logic...
块:
if(a.BusinessPartnerFormattedName < b.BusinessPartnerFormattedName) return -1;
if(a.BusinessPartnerFormattedName > b.BusinessPartnerFormattedName) return 1;
return 0;
推荐阅读
- python - 提高将 JSON 字符串列表转换为 Dataframe 的性能
- machine-learning - 微调 Resnet 50 不能很好的准确性和验证是小我如何改进?
- ios - 是否可以从第三方/受信任的应用程序深度链接到 App Clips (iOS)?
- javascript - 如何在 Web Flutter 中使用 tfjs 模型 /posenet
- apache-spark - 无法使用 spark-ec2 在 aws 上创建 spark 集群:每 30 秒重试一次错误
- vue.js - 如何更改 Vue 中的 url?
- string - TypeError: write() 参数必须是 str,而不是当变量已经是字符串时的字节
- mongodb - 无法连接到 ubuntu 18.04 GCP 服务器中的 MongoDB
- sql - 在红移中以滚动 12 个月为基础迭代生成的系列
- typescript - 问:Office 脚本 - 从列中删除数据