我必须对此进行排序:
我正在从两个不同的 select
查询的数据库中获取数据,并且必须按 mpriority
和 mdate
对它们进行排序。
我知道如何对对象数组进行排序,但我不能使用 object
也不能使用 object.key
var allocations = new Array();
allocations[0] =
[ qtA = 15,
mdata= '1234',
mid = '234234234',
qtyToDoTemp= 11,
mpriority= 5,
mdate= new Date('2017-04-27 11:26:02.147'),
];
allocations[1] =
[
qtA= 13,
mdata= '1234',
mid = '234234234',
qtyToDoTemp= 11,
mpriority= 5,
mdate= new Date('2016-10-07 00:00:00.000'),
];
allocations[2] =
[
qtA= 16,
mdata= '1234',
mid = '234234234',
qtyToDoTemp= 11,
mpriority= 4,
mdate= new Date('2017-04-27 11:26:02.147'),
];
allocations[3] =
[
qtA= 95,
mdata= '1234',
mid = '234234234',
qtyToDoTemp= 11,
mpriority= 1,
mdate= new Date('2016-10-06 00:00:00.000'),
];
allocations[4] =
[
qtA= 75,
mdata= '1234',
mid = '234234234',
qtyToDoTemp= 11,
mpriority= 8,
mdate= new Date('2017-02-20 12:41:34.903'),
];
allocations[5] =
[
qtA= 45,
mdata= '1234',
mid = '234234234',
qtyToDoTemp= 11,
mpriority= 0,
mdate= new Date('2017-04-27 11:26:02.147'),
];
排序函数应首先查看mpriority
- 如果两个值相同,则检查mdate
我想应该是这样的
var sortOptions = {
byPriorityAndDate: function (a, b) {
return (b.mpriority - a.mpriority) || (a.mdate - b.mdate);
},
}
以及如何检查我正在处理的 js 版本?
最佳答案
你有数组的数组,而不是对象的数组。
我建议您将数组数组转换为对象数组,实例化每个元素,如下所示:
allocations[0] = {
qtA: 15,
mdata: '1234',
mid: '234234234',
qtyToDoTemp: 11,
mpriority: 5,
mdate: new Date('2017-04-27 11:26:02.147'),
};
这样,您编写的用于比较的函数就应该可以工作
另外,我建议您阅读Compare two dates with JavaScript了解您想要哪种比较
无论如何,这个排序函数将适合您的情况:
allocations = allocations.sort((a, b) => {
if (a[4] === b[4]) {
return a[5].getTime() - b[5].getTime();
}
return a[4] - b[4];
})
var allocations = new Array();
allocations[0] =
[ qtA = 15,
mdata= '1234',
mid = '234234234',
qtyToDoTemp= 11,
mpriority= 5,
mdate= new Date('2017-04-27 11:26:02.147'),
];
allocations[1] =
[
qtA= 13,
mdata= '1234',
mid = '234234234',
qtyToDoTemp= 11,
mpriority= 5,
mdate= new Date('2016-10-07 00:00:00.000'),
];
allocations[2] =
[
qtA= 16,
mdata= '1234',
mid = '234234234',
qtyToDoTemp= 11,
mpriority= 4,
mdate= new Date('2017-04-27 11:26:02.147'),
];
allocations[3] =
[
qtA= 95,
mdata= '1234',
mid = '234234234',
qtyToDoTemp= 11,
mpriority= 1,
mdate= new Date('2016-10-06 00:00:00.000'),
];
allocations[4] =
[
qtA= 75,
mdata= '1234',
mid = '234234234',
qtyToDoTemp= 11,
mpriority= 8,
mdate= new Date('2017-02-20 12:41:34.903'),
];
allocations[5] =
[
qtA= 45,
mdata= '1234',
mid = '234234234',
qtyToDoTemp= 11,
mpriority= 0,
mdate= new Date('2017-04-27 11:26:02.147'),
];
allocations = allocations.sort((a, b) => {
if (a[4] === b[4]) {
return a[5].getTime() - b[5].getTime();
}
return a[4] - b[4];
})
console.log(allocations)
关于javascript - 排序数组多维javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43920518/