我正在使用每個物件內的日期值對物件陣列進行排序。我現在有一個邊緣情況,如果該noDate
屬性設定為 true,則該物件應排在 id 為 2 的物件之后。
一個物件看起來像這樣:
{
id: 1 // just simple ids 1...99
date: ...
noDate: true // true or false
}
目前它是這樣排序的,但這并沒有提供我需要的邏輯。
data.sort((a, b) => (!a.noDate - !b.noDate) || new Date(a.date) - new Date(b.date))
uj5u.com熱心網友回復:
您可以先排序以獲取noDate: true陣列頂部的所有元素,然后映射一個新陣列以獲取id: 2物件之后的所有頂部專案。這種方法需要最終
let
data = [
{ id: 0, noDate: true },
{ id: 1, date: new Date('2021-10-30') },
{ id: 2, date: new Date('2020-10-30') },
{ id: 3, noDate: true },
{ id: 4, date: new Date('2021-09-30') },
{ id: 5, date: new Date('2020-09-15') },
{ id: 6, noDate: true }
];
data = data
.sort((a, b) => !a.noDate - !b.noDate || a.date - b.date)
.flatMap((a => o => {
if (o.noDate) { a.push(o); return []; }
if (o.id === 2) return [o, a];
return o;
})([]))
.flat();
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
簡單地
list.sort((a, b) => a.noDate ? -1 : new Date(a.date) - new Date(b.date))
或者,如果您想先按兩個欄位排序sortNumber,然后按日期排序
list.sort((a, b) => a.sortNumber == b.sortNumber ? new Date(a.date) - new Date(b.date): a.sortNumber - b.sortNumber)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/351242.html
標籤:javascript 排序
上一篇:sorted是重復條目
