【问题标题】:lodash orderby partial sortlodash orderby部分排序
【发布时间】:2020-06-10 09:29:55
【问题描述】:

我有一个包含如下元素的数组。我需要对数组进行部分排序。而所有带有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
  }
]

【问题讨论】:

    标签: javascript angular lodash


    【解决方案1】:

    使用实现所需逻辑的自定义排序函数。如果我没听错的话,这应该对你有用:

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

    【讨论】:

    • 这就像一个很棒的技巧。只有一个问题需要如何整理基于字符串的数字/日期。
    • @AdnanAshraf :我很难理解您的后续问题。你能试着澄清你想要做什么吗?请注意,提供的答案按字母顺序排列日期。这对于示例数据来说已经足够了,但在现实世界中可能不起作用。在这种情况下,您可能希望将时间戳解析为实现正确日期排序的数据类型。
    • 如果我需要添加另一个带有排序的字段怎么办?基于 o.fix == 0,按 o.jobDueDate 和 o.paperSize 排序。而 o.paperSize 是基于数字的数字,但采用字符串格式。由于字符串格式,“1280”数字将按升序排列,与“250”相比
    • 最好是为此打开一个新问题。
    猜你喜欢
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 2014-05-20
    相关资源
    最近更新 更多