[英]Sort an array with objects date property
我有一個包含如下對象的數組:
{
Title: "Title",
Url: "myUrl",
publishedDate: "19/01/2021"
},
{
Title: "Title 2",
Url: "myUrl",
publishedDate: "17/12/2020"
},
{
Title: "Title 3",
Url: "myUrl",
publishedDate: "11/03/2021"
},
{
Title: "Title 4",
Url: "myUrl",
publishedDate: "11/12/2020"
}
我已將它們保存在我的 state(數組)中。
this.state.data
我想根據屬性“publishedDate”訂購對象(由於 memory 效率,不使用 new Date())。 我嘗試:
console.log(this.state.data.sort(function(a, b) {
var c = new Date(a.publishedDate);
var d = new Date(b.publishedDate);
return c.getTime() - d.getTime();
}))
但是對象不按順序排列。 代碼有什么問題? 操場:
如果日期格式始終相同,您可以創建格式為YYYYMMDD
的字符串,然后進行比較 -
var data = [{ Title: "Title", Url: "myUrl", publishedDate: "19/01/2021" }, { Title: "Title 2", Url: "myUrl", publishedDate: "17/12/2020" }, { Title: "Title 3", Url: "myUrl", publishedDate: "11/03/2021" }, { Title: "Title 4", Url: "myUrl", publishedDate: "11/12/2020" }] var sortedData = data.sort(function(a, b) { a = a.publishedDate.split('/').reverse().join(''); b = b.publishedDate.split('/').reverse().join(''); return a > b? 1: a < b? -1: 0; }); console.log(sortedData);
這里的解決方案也提出了相同的建議(以及使用.localeCompare
作為替代方案)
您可以使用 Date.UTC 方法接受年、月索引、日來創建日期並通過解析輸入日期字符串來傳遞這些值,如下所示:
this.state = { data: [{ Title: "Title", Url: "myUrl", publishedDate: "19/01/2021" }, { Title: "Title 2", Url: "myUrl", publishedDate: "17/12/2020" }, { Title: "Title 3", Url: "myUrl", publishedDate: "11/03/2021" }, { Title: "Title 4", Url: "myUrl", publishedDate: "11/12/2020" }]}; console.log(this.state.data.sort(function(a, b) { var c = Date.UTC(a.publishedDate.split("/")[2], a.publishedDate.split("/")[1] - 1, a.publishedDate.split("/")[0]); var d = Date.UTC(b.publishedDate.split("/")[2], b.publishedDate.split("/")[1] - 1, b.publishedDate.split("/")[0]); return c - d; }))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.