簡體   English   中英

按狀態排序,然后按日期 JavaScript

[英]Sort by Status then by date JavaScript

我有一個我想要排序的以下類型的數組。 我想按狀態對它們進行排序並首先顯示錯誤的,然后按日期對它們進行排序。 我不知道我是否應該使用 group by then sort。

    "itemlist": [{
"Status":false,"Date":"2021-07-23T07:43:01.377Z","Title":"test4"},{
"Status":false,"Date":"2021-07-23T07:28:23.841Z","Title":"test3"},{
"Status":false,"Date":"2021-07-23T07:03:12.736Z","Title":"test2"},{
"Status":false,"Date":"2021-07-23T07:02:01.901Z","Title":"test1"},{
"Status":false,"Date":"2021-07-23T06:46:34.614Z","Title":"test1"},{
"Status":false,"Date":"2021-07-22T14:33:41.351Z","Title":"test0"},{
"Status":true,"Date":"2021-07-16T06:28:41.568Z","Title":"Test"}]

我使用了下面的代碼,它按狀態對數組進行排序,但日期排序不起作用。 有人可以用更好的方法幫助我嗎,我做錯了什么? , 謝謝

var res=itemlist.sort((a, b) => (a.Status === b.Status ) ? 0 : a.Status ? 1 : -1 || b.Date- a.Date);
  

原因是你的日期是字符串格式,不是實際日期,比較的時候需要改成日期

var res=itemlist.sort(
   (a, b) => (a.Status === b.Status ) ? 
      0 : a.Status ? 1 : -1 || new Date(b.Date)- new Date(a.Date));

另外,您的表達式太復雜而無法閱讀和調試,最好使用()包裝它或使用 if else 條件代替

 var res=itemlist.sort(
   (a, b) => (a.Status === b.Status ) ? 
      0 : (a.Status ? 1 : -1 || new Date(b.Date)- new Date(a.Date)));

工作代碼

 var itemlist = [{ "Status":false,"Date":"2021-07-23T07:43:01.377Z","Title":"test4"},{ "Status":false,"Date":"2021-07-23T07:28:23.841Z","Title":"test3"},{ "Status":false,"Date":"2021-07-23T07:03:12.736Z","Title":"test2"},{ "Status":false,"Date":"2021-07-23T07:02:01.901Z","Title":"test1"},{ "Status":false,"Date":"2021-07-23T06:46:34.614Z","Title":"test1"},{ "Status":false,"Date":"2021-07-22T14:33:41.351Z","Title":"test0"},{ "Status":true,"Date":"2021-07-16T06:28:41.568Z","Title":"Test"}]; var res=itemlist.sort( (a, b) => (a.Status === b.Status ) ? 0 : (a.Status ? 1 : -1 || new Date(b.Date)- new Date(a.Date))); //output the sorted result console.log(res);

暫無
暫無

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

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