簡體   English   中英

按日期排序對象數組無法正常工作,忽略年份值

[英]Sorting Array of Objects by date doesn't work correctly, ignores year value

我有一個項目的對象數組,它們在其中工作有點像博客的條目。 然后,我嘗試按每個條目的發布日期(最近是最近的)對條目進行排序,但是,顯然排序 function 沒有考慮年份值或我遺漏的其他問題。

示例情況

其中一個條目於 2019 年 6 月 23 日 (6) 發布,它是 output 數組的第一個值,因為它是最近日期的條目。 但是,如果我嘗試將其年份更改為 2005 年,它將保持在頂部,就像 function 會忽略年份一樣。 我也嘗試將其更改為 0,但結果保持不變。

我使用的代碼

對象數組中的示例項

對於日期,我使用了另一個數組,其中索引0表示Day ,索引1表示Month ,索引2表示Year

[{Id: "P3", Date: [23, 6, 2019]}, ...]

排序 function

我使用Date arrays 的三個值來計算從第 0 天開始的總天數並比較它們(最大天數 = 最近的條目)

array.sort((a, b) => ((a.Date[0] + (a.Date[1] * 30) + (a.Date[2] * 365)) < (b.Date[0] + (b.Date[1] * 30) + (b.Date[2] * 365)) ? 1 : -1)).map(item => item.Id)

function 按順序輸出一個數組,其中包含它們引用的條目的Id

修復我的代碼的任何幫助都會有所幫助和贊賞:)

嘗試這個。

 function convertDateToNumber(date) { return Number(date[2] + date[1].toString().padStart(2, 0) + date[0].toString().padStart(2, 0)); } var dates = [ { Id: "P3", Date: [23, 6, 2019] }, { Id: "P4", Date: [3, 6, 2019] }, { Id: "P5", Date: [23, 12, 2019] }, { Id: "P6", Date: [23, 7, 2019] }, { Id: "P7", Date: [3, 12, 2019] } ]; dates.sort((a, b) => { var aNumber = convertDateToNumber(a.Date); var bNumber = convertDateToNumber(b.Date); if (aNumber < bNumber) { return -1; } if (aNumber > bNumber) { return 1; } return 0; }); console.log(dates);

使用 JavaScript 數據類型“日期”而不是數組格式。 然后比較要排序的日期。

更改您的代碼

[{Id: "P3", Date: [23, 6, 2019]}, ...]

[{Id: "P3", date: '23/6/2019'/*use proper date format*/}, ...]

通過此更改,您可以對對象進行如下排序

array.sort(function(a,b){
var date1 = new Date(a.date);
var date2 = new Date(b.date);
return date1 > date2? 1:-1;
});

您最好使用Date library來比較 Date 數據,例如: moment.js

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM