我希望根據當前日期對陣列中的值進行排序。
我的價值觀:
[{
date: "12-28",
id: 1
}, {
date: "11-30",
id: 2
}, {
date: "09-30",
id: 3
}, {
date: "05-30",
id: 4
}]
我試圖做這樣的事情,但它并沒有真正起作用:
var array = [{id: 1, date:'12-28'},
{id: 2, date:'11-30'},
{id: 3, date:'09-30'},
{id: 4, date:'05-30'}];
const now = Date.now();
array.sort(function(a, b) {
var c = new Date(a.date);
var d = new Date(b.date);
return (now-c)-(now-d);
});
console.log(array);
如果是 11 月 29 日:
[{
date: "11-30",
id: 2
}, {
date: "12-28",
id: 1
}, {
date: "05-30",
id: 4
}, {
date: "09-30",
id: 3
}]
uj5u.com熱心網友回復:
您可以使用Array.sort()為您提供所需的結果,我已將輸入陣列中的日期移至今年:
let input = [{ date: "2021-12-28", id: 1 }, { date: "2021-11-30", id: 2 }, { date: "2021-09-30", id: 3 }, { date: "2021-05-30", id: 4 }];
function sortByNearest({ date: a}, {date: b}) {
const now = Date.now();
return (Math.abs(Date.parse(a) - now)) - (Math.abs(Date.parse(b) - now));
}
console.log(input.sort(sortByNearest))
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
如何轉向mm-dd到mmdd,然后轉換成數字,然后使用Math.abs()如下?
const arr = [
{date: "12-28",id: 1},
{date: "11-30",id: 2},
{date: "09-30",id: 3},
{date: "05-30",id: 4}
];
const dt = new Date();
const now = [dt.getMonth() 1, dt.getDate()].map(v => `0${v}`.slice(-2)).join('');
const ordered = arr.sort((a,b) => Math.abs( a.date.replace(/[^\d] /,'') - now) - Math.abs( b.date.replace(/[^\d] /,'') - now));
console.log( ordered );
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/370004.html
標籤:javascript 数组 排序
