簡體   English   中英

使用對象日期屬性對數組進行排序

[英]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();
}))

但是對象不按順序排列。 代碼有什么問題? 操場:

https://www.typescriptlang.org/play?#code/FAYw9gdgzgLgBAQwE5IQTzgXjgb2HOAEwRgQC44BtPOAFQEsYAbAUwoCIHmX2AafAKpImHALZohTPvgAOAVwBGTelAAWLQgBESbOOwCMATgD0ABn3GATKcv72+OAF9+BGgS6sOHlnEvTJYhLC0vJKKupaOhz6AOzG+pZWNqb2BM4Obt5ejKxwAMz+woGSIYrKahraMLoGFqZ5SbapTi64wFl63nAALIUieuIl-KHlEVU1+hYJjSkOjg4AusDzwKCQUGCsAHRMYADmABTIqGhbxKRbG0gwBwBmchAgMPSQR7xwCgCUbQQAbshwEBYOAQFgAdzg4yOWxG4UqOk+AG4HP8kERgaCIVCFDCynDItUkQ4kCwYHIkBBAVs9qSGKIWAdvgBaIjU2n0emM5GOT6fYBAA

如果日期格式始終相同,您可以創建格式為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.

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