javascript - lodash orderby部分排序
问题描述
我有一个包含如下元素的数组。我需要对数组进行部分排序。而所有的元素fix===1
都应该先出现,并保留它们在数据集中出现的顺序。然后所有其他 ( fix==0
) 应按 排序jobDueDate
。
我尝试了以下方法:
_.orderBy(data, ['fix', 'jobDueDate'], ['desc', 'asc']);
这会将条目fix==1
放在顶部,但也会对它们应用排序,这不是要求。
[
{
"id": 6060,
"jobNumber": 1878,
"jobDueDate": "2018-02-07T00:00:00",
"fix": 1
},
{
"id": 5337,
"jobNumber": 1836,
"jobDueDate": "2018-02-05T00:00:00",
"fix": 1
},
{
"id": 5702,
"jobNumber": 1863,
"jobDueDate": "2018-02-06T00:00:00",
"fix": 1
},
{
"id": 32583,
"jobNumber": 1611,
"jobDueDate": "1753-01-01T00:00:00",
"fix": 0
},
{
"id": 33403,
"jobNumber": 1932,
"jobDueDate": "2008-01-28T00:00:00",
"fix": 0
},
{
"id": 29481,
"jobNumber": 2741,
"jobDueDate": "2018-02-03T00:00:00",
"fix": 0
},
{
"id": 278,
"jobNumber": 1541,
"jobDueDate": "2018-02-05T00:00:00",
"fix": 0
},
{
"id": 5331,
"jobNumber": 1836,
"jobDueDate": "2018-02-05T00:00:00",
"fix": 0
},
{
"id": 5708,
"jobNumber": 1863,
"jobDueDate": "2018-02-06T00:00:00",
"fix": 0
},
{
"id": 6066,
"jobNumber": 1878,
"jobDueDate": "2018-02-07T00:00:00",
"fix": 0
},
{
"id": 5193,
"jobNumber": 1825,
"jobDueDate": "2018-02-08T00:00:00",
"fix": 0
}
]
解决方案
使用实现所需逻辑的自定义排序功能。如果我说对了,这应该可以为您解决问题:
_.sortBy(input, (o) => o.fix == 1 ? 0 : o.jobDueDate);
推荐阅读
- amazon-web-services - 如何在多个实例上运行用户数据?
- java - JSF selectOneMenu onChange 更新对象
- android-security - 将应用上传到 Play 商店,您的应用正在使用不安全的 HostnameVerifier 实现
- html - 如何在符号之前设置部分文本字符串的样式
- node.js - device.servicesUUID 输出 then.catch 打印但在值内
- javascript - 使用javascript从多个子域中提取域
- go - 非平凡代码golang的执行时间为零
- node.js - NodeJS 上的 Axios 不会登录会话,但从 Postman 会
- facebook - Facebook 像素事件重复数据删除 - 唯一 EventID
- c++ - 如何实现`my_class_instance(a, b) = value`操作