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