JavaScript數組:如何排序與鑑於以下陣列多datetime列
var effectiveDates= [
{
actualDate: "2017-08-29",
effectiveDate: "2017-01-01",
time: "13:22"
},
{
actualDate: "2017-08-29",
effectiveDate: "2017-01-01",
time: "11:33"
},
{
actualDate: "2017-08-29",
effectiveDate: "2017-01-01",
time: "10:57"
},
{
actualDate: "2016-06-17",
effectiveDate: "2016-01-01",
time: "10:26"
},
{
actualDate: "2016-06-17",
effectiveDate: "2016-01-01",
time: "10:03"
},
{
actualDate: "2015-12-03",
effectiveDate: "2015-01-01",
time: "16:54"
},
{
actualDate: "2014-07-07",
effectiveDate: "2014-05-01",
time: "10:47"
},
{
actualDate: "2014-07-07",
effectiveDate: "2014-05-01",
time: "10:41"
},
{
actualDate: "2014-07-07",
effectiveDate: "2014-01-01",
time: "10:36"
},
{
actualDate: "2014-07-07",
effectiveDate: "2014-01-01",
time: "10:36"
}
]
我想基於actualDate
或effectiveDate
下降(或上升取決於量級)對數據進行排序,然後按時間(也可根據所需訂單升序或降序)。我遇到的問題是日期順序正確,但time
屬性沒有正確排序。我正在使用moment.js進行日期和時間分析。
這是我迄今爲止嘗試:
var desc = true; //false;
effectiveDates.sort(function (a, b) {
if (desc) {
if (moment(a.actualDate) === moment(b.actualDate)) {
return (moment(b.time) - moment(a.time));
} else if (moment(a.actualDate) < moment(b.actualDate)) {
return 1;
} else if (moment(a.actualDate) > moment(b.actualDate)) {
return -1;
}
}
else {
if (moment(a.actualDate) === moment(b.actualDate)) {
return (moment(b.time) - moment(a.time));
} else if (moment(a.actualDate) > moment(b.actualDate)) {
return 1;
} else if (moment(a.actualDate) < moment(b.actualDate)) {
return -1;
}
}
});
出於某種原因,通過effectiveDate
升序或降序排序的數據時,time
正確排序。 但是當通過actualDate
訂購數據時,也可以升序或降序,time
數據不正確。
任何幫助將不勝感激。
相反調用'力矩(a.actualDate)'的倍的負荷,更好它們存儲在一個變量:'ADATE =時刻(a.actualDate )'等 – Cerbrus
在這兩種情況下,您的時間比較都是以相同的方向進行的。 – Pointy
也沒有必要爲其他....你可以只有一組,並基於desc翻轉-1或1。 – epascarello