簡體   English   中英

數組列表按布爾值排序,然后按日期 JavaScript / TypeScript

[英]Array List Sort by Boolean then by Date JavaScript / TypeScript

我正在動態地將新項目添加到列表中,然后首先根據狀態然后按日期對其進行排序。 工作代碼

我希望列表顯示帶有最新日期的錯誤狀態項目,當我向列表添加新項目時首先按 desc 顯示,然后按日期 desc 顯示真值項目

added item ={"Status":false,"Date":"2021-07-23T07:43:01.377Z","Title":"test6"}

無序列表:-

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

預期結果:-

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

得到的結果:-

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

使用方法:-

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

你可以排序

  • 價值增量遞增的Status ,以及
  • Date為字符串降序。

 var itemlist = [{ Status: true, Date: "2021-07-23T07:28:23.841Z", Title: "test5" }, { Status: false, Date: "2021-07-23T07:03:12.736Z", Title: "test4" }, { Status: false, Date: "2021-07-23T07:02:01.901Z", Title: "test3" }, { Status: true, Date: "2021-07-23T06:46:34.614Z", Title: "test2" }, { Status: false, Date: "2021-07-22T14:33:41.351Z", Title: "test1" }, { Status: true, Date: "2021-07-16T06:28:41.568Z", Title: "Test0" }, { Status: false, Date: "2021-07-23T07:43:01.377Z", Title: "test6" }]; itemlist.sort((a, b) => a.Status - b.Status || b.Date.localeCompare(a.Date)); console.log(itemlist);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

您可以在sort回調中使用邏輯 OR 運算符。

 var itemlist = [{ "Status":true,"Date":"2021-07-23T07:28:23.841Z","Title":"test5"},{ "Status":false,"Date":"2021-07-23T07:03:12.736Z","Title":"test4"},{ "Status":false,"Date":"2021-07-23T07:02:01.901Z","Title":"test3"},{ "Status":true,"Date":"2021-07-23T06:46:34.614Z","Title":"test2"},{ "Status":false,"Date":"2021-07-22T14:33:41.351Z","Title":"test1"},{ "Status":true,"Date":"2021-07-16T06:28:41.568Z","Title":"Test0"}]; itemlist.sort((a,b) => a.Status - b.Status || new Date(b.Date) - new Date(a.Date)) console.log(itemlist);

首先, Unordered list:-Expected Result:-在您的示例數據中沒有相同數量的元素。 當您尋求幫助時,請嘗試正確獲取示例數據。

解決方案:

var compareFn = (a, b) => {
    if (a.Status !== b.Status) {
        return a.Status ? 1 : -1;
    } else {
        return new Date(b.Date) < new Date(a.Date) ? -1 : 1;
    }
}

var res=itemlist.sort(compareFn);

解釋:

如果.Status不匹配,我們首先想要帶有 false 的元素,否則如果.Status匹配我們想要比較日期。

暫無
暫無

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

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