[英]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.