【发布时间】:2021-04-15 10:49:35
【问题描述】:
我正在尝试通过某些条件实现嵌套排序。例如,我有一个对象数组:
我拥有的对象数组:
var objArray = [
{
total: 2,
completed: 1,
created: "2021-03-19T13:09:57.9191082",
},
{
total: 2,
completed: 0,
created: "2021-03-19T15:36:32.5761928",
},
{
total: 2,
completed: 1,
created: "2021-03-19T15:40:47.1690151",
},
{
total: 3,
completed: 1,
created: "2021-03-22T09:33:03.1541255",
},
{
total: 2,
completed: 1,
created: "2021-03-23T08:42:45.9854381",
},
{
total: 2,
completed: 1,
created: "2021-03-23T09:37:17.8576954",
},
{
total: 22,
completed: 2,
created: "2021-03-23T09:40:16.1180247",
},
{
total: 22,
completed: 21,
created: "2021-03-23T10:07:13.6602386",
},
{
total: 2,
completed: 2,
created: "2021-04-01T08:41:17.2340404",
},
{
total: 2,
completed: 1,
created: "2021-04-01T09:33:20.9257699",
},
{
total: 2,
completed: 2,
created: "2021-04-01T09:40:13.4354591",
},
{
total: 2,
completed: 1,
created: "2021-04-07T07:43:03.8319172",
},
{
total: 4,
completed: 0,
created: "2021-04-07T07:50:36.8278655",
},
{
total: 2,
completed: 2,
created: "2021-04-07T08:31:05.2998603",
},
{
total: 2,
completed: 1,
created: "2021-04-07T08:31:53.3266938",
},
{
total: 3,
completed: 0,
created: "2021-04-15T08:18:33.1249212",
},
{
total: 3,
completed: 1,
created: "2021-04-15T08:21:25.5196674",
},
];
我想要实现的对象数组:
var objArray = [
{
percentage: '0',
total: 2,
completed: 0,
created: '2021-03-19T15:36:32.5761928',
},
{
percentage: '0',
total: 4,
completed: 0,
created: '2021-04-07T07:50:36.8278655',
},
{
percentage: '0',
total: 3,
completed: 0,
created: '2021-04-15T08:18:33.1249212',
},
{
percentage: '95',
total: 22,
completed: 21,
created: '2021-03-23T10:07:13.6602386',
},
{
percentage: '50',
total: 2,
completed: 1,
created: '2021-03-19T13:09:57.9191082',
},
{
percentage: '50',
total: 2,
completed: 1,
created: '2021-03-19T15:40:47.1690151',
},
{
percentage: '50',
total: 2,
completed: 1,
created: '2021-03-23T08:42:45.9854381',
},
{
percentage: '50',
total: 2,
completed: 1,
created: '2021-03-23T09:37:17.8576954',
},
{
percentage: '50',
total: 2,
completed: 1,
created: '2021-04-01T09:33:20.9257699',
},
{
percentage: '50',
total: 2,
completed: 1,
created: '2021-04-07T07:43:03.8319172',
},
{
percentage: '50',
total: 2,
completed: 1,
created: '2021-04-07T08:31:53.3266938',
},
{
percentage: '33',
total: 3,
completed: 1,
created: '2021-03-22T09:33:03.1541255',
},
{
percentage: '33',
total: 3,
completed: 1,
created: '2021-04-15T08:21:25.5196674',
},
{
percentage: '9',
total: 22,
completed: 2,
created: '2021-03-23T09:40:16.1180247',
},
{
percentage: '100',
total: 2,
completed: 2,
created: '2021-04-07T08:31:05.2998603',
},
{
percentage: '100',
total: 2,
completed: 2,
created: '2021-04-01T09:40:13.4354591',
},
{
percentage: '100',
total: 2,
completed: 2,
created: '2021-04-01T08:41:17.2340404',
},
];
从这个对象数组中,我映射对象并创建额外的键/值“百分比”来计算总数和完成之间的百分比,并按完成的百分比对它们进行排序。完成百分比排序后,我还有其他条件。如果百分比为 100% 完成,则按“创建”日期字段对 100% 完成的任务进行排序。如果百分比在 1 - 99 之间,则按完成百分比排序,例如,如果两个字段之间的完成百分比相同,则按日期排序。此外,如果完成的百分比为 0,则按 asc date 排序。
我已经尝试过这个功能,但无法对 1 到 99 之间的百分比进行排序。对此有什么帮助吗?
var objArray = [
{
total: 2,
completed: 1,
created: "2021-03-19T13:09:57.9191082",
},
{
total: 2,
completed: 0,
created: "2021-03-19T15:36:32.5761928",
},
{
total: 2,
completed: 1,
created: "2021-03-19T15:40:47.1690151",
},
{
total: 3,
completed: 1,
created: "2021-03-22T09:33:03.1541255",
},
{
total: 2,
completed: 1,
created: "2021-03-23T08:42:45.9854381",
},
{
total: 2,
completed: 1,
created: "2021-03-23T09:37:17.8576954",
},
{
total: 22,
completed: 2,
created: "2021-03-23T09:40:16.1180247",
},
{
total: 22,
completed: 21,
created: "2021-03-23T10:07:13.6602386",
},
{
total: 2,
completed: 2,
created: "2021-04-01T08:41:17.2340404",
},
{
total: 2,
completed: 1,
created: "2021-04-01T09:33:20.9257699",
},
{
total: 2,
completed: 2,
created: "2021-04-01T09:40:13.4354591",
},
{
total: 2,
completed: 1,
created: "2021-04-07T07:43:03.8319172",
},
{
total: 4,
completed: 0,
created: "2021-04-07T07:50:36.8278655",
},
{
total: 2,
completed: 2,
created: "2021-04-07T08:31:05.2998603",
},
{
total: 2,
completed: 1,
created: "2021-04-07T08:31:53.3266938",
},
{
total: 3,
completed: 0,
created: "2021-04-15T08:18:33.1249212",
},
{
total: 3,
completed: 1,
created: "2021-04-15T08:21:25.5196674",
},
];
var sorted = objArray
.map((p) => ({ percentage: ((p.completed / p.total) * 100).toFixed(), ...p }))
.sort((a, b) => {
if (
a.percentage == b.percentage &&
a.percentage == "100" &&
b.percentage == "100"
) {
return b.created.localeCompare(a.created);
} else if (a.percentage == b.percentage) {
return a.created.localeCompare(b.created);
} else {
return Number(a.percentage) - Number(b.percentage);
}
});
console.log(sorted)
【问题讨论】:
标签: javascript sorting