首页 > 解决方案 > 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
  }
]

标签: javascriptangularlodash

解决方案


使用实现所需逻辑的自定义排序功能。如果我说对了,这应该可以为您解决问题:

_.sortBy(input, (o) => o.fix == 1 ? 0 : o.jobDueDate);

推荐阅读