【问题标题】:How to sort by date and one more parameter [duplicate]如何按日期和另一个参数排序[重复]
【发布时间】:2020-04-17 07:45:23
【问题描述】:

初始数组

var array = [
  {
    "name": "Service-1",
    "status": "Cancelled",
    "startDate": "2020-04-02T00:00:00",
    "id": 10
  },
  {
    "name": "Service-2",
    "status": "Cancelled",
    "startDate": "2020-04-03T00:00:00",
    "id": 9
  },
  {
    "name": "DG_3029_Export1",
    "status": "Approved",
    "startDate": "2020-03-01T00:00:00",
    "id": 11
  },
  {
    "name": "DG_3029_Export2",
    "status": "Approved",
    "startDate": "2020-04-02T00:00:00",
    "id": 12
  },
  {
    "name": "Service-10",
    "status": "Cancelled",
    "startDate": "2020-04-10T00:00:00",
    "id": 19
  }
];

预期结果:

var array = [
      {
        "name": "DG_3029_Export2",
        "status": "Approved",
        "startDate": "2020-04-02T00:00:00",
        "id": 12
      },
      {
        "name": "DG_3029_Export1",
        "status": "Approved",
        "startDate": "2020-03-01T00:00:00",
        "id": 11
      },
      {
        "name": "Service-10",
        "status": "Cancelled",
        "startDate": "2020-04-10T00:00:00",
        "id": 19
      },
      {
        "name": "Service-2",
        "status": "Cancelled",
        "startDate": "2020-04-03T00:00:00",
        "id": 9
      },
      {
        "name": "Service-1",
        "status": "Cancelled",
        "startDate": "2020-04-02T00:00:00",
        "id": 10
      } 
    ];

按日期降序排序(这是我到目前为止能够实现的)

   var array = [
      {
        "name": "Service-10",
        "status": "Cancelled",
        "startDate": "2020-04-10T00:00:00",
        "id": 19
      },
      {
        "name": "Service-2",
        "status": "Cancelled",
        "startDate": "2020-04-03T00:00:00",
        "id": 9
      },
      {
        "name": "Service-1",
        "status": "Cancelled",
        "startDate": "2020-04-02T00:00:00",
        "id": 10
      },
      {
        "name": "DG_3029_Export2",
        "status": "Approved",
        "startDate": "2020-04-02T00:00:00",
        "id": 12
      },
      {
        "name": "DG_3029_Export1",
        "status": "Approved",
        "startDate": "2020-03-01T00:00:00",
        "id": 11
      }

    ];

小提琴: https://jsfiddle.net/fierce_trailblazer/gs9ek0oz/

我的目标是按日期排序,然后在开头显示所有状态为“已批准”的对象

是否可以使用 javascript sort 按日期和附加参数进行排序?

var array = [{
    "name": "Service-1",
    "status": "Cancelled",
    "startDate": "2020-04-02T00:00:00",
    "id": 10
  },
  {
    "name": "DG_3029_Export1",
    "status": "Approved",
    "startDate": "2020-03-01T00:00:00",
    "id": 11
  },
  {
    "name": "DG_3029_Export2",
    "status": "Approved",
    "startDate": "2020-04-02T00:00:00",
    "id": 12
  },
  {
    "name": "Service-10",
    "status": "Cancelled",
    "startDate": "2020-04-10T00:00:00",
    "id": 19
  },
  {
    "name": "DG_Export3",
    "status": "Cancelled",
    "startDate": "2020-04-02T00:00:00",
    "id": 13
  },
  {
    "name": "Service-5",
    "status": "Cancelled",
    "startDate": "2020-04-02T00:00:00",
    "id": 14
  },
  {
    "name": "Service-6",
    "status": "Cancelled",
    "startDate": "2020-04-02T00:00:00",
    "id": 15
  },
  {
    "name": "Service-7",
    "status": "Cancelled",
    "startDate": "2020-04-02T00:00:00",
    "id": 16
  },
  {
    "name": "DG_Export4",
    "status": "Cancelled",
    "startDate": "2020-04-02T00:00:00",
    "id": 17
  },
  {
    "name": "DG_Export5",
    "status": "Cancelled",
    "startDate": "2020-04-02T00:00:00",
    "id": 18
  }
];

array.sort((a, b) =>
  new Date(b.startDate) - new Date(a.startDate)
)
for (let i = 0; i < array.length; i++) {
  console.log("Id:\t" + array[i].id + "\tStatus:\t" + array[i].status + "\tDate:\t" + array[i].startDate.substring(1, 10));
}

【问题讨论】:

标签: javascript sorting date parameters


【解决方案1】:

您需要先按状态排序,然后按日期排序,才能将所有已批准的项目排在最前面。

var array = [{ name: "Service-1", status: "Cancelled", startDate: "2020-04-02T00:00:00", id: 10 }, { name: "Service-2", status: "Cancelled", startDate: "2020-04-03T00:00:00", id: 9 }, { name: "DG_3029_Export1", status: "Approved", startDate: "2020-03-01T00:00:00", id: 11 }, { name: "DG_3029_Export2", status: "Approved", startDate: "2020-04-02T00:00:00", id: 12 }, { name: "Service-10", status: "Cancelled", startDate: "2020-04-10T00:00:00", id: 19 }];

array.sort((a, b) =>
    (b.status === "Approved") - (a.status === "Approved") ||
    b.startDate.localeCompare(a.startDate)
);

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-19
    • 2014-09-08
    • 1970-01-01
    • 2017-05-21
    • 2013-03-11
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    相关资源
    最近更新 更多