我的联系人都有与他们相关联的短信。每条短信记录都有time
等属性。时间是一个时间戳字符串,格式如下例
2022-04-29T16:10:43-06:00
我正试图对这个短信数组进行排序,以便最新的是最后一个,最早的是数组中的第一个。我以为我把它钉牢了,但显然我没有。它仍然没有完全排序。
this.getRecent()
.then(contacts => {
const sorted = contacts.map(contact => {
contact.sms = contact.sms.sort((a,b) => (a.time.localeCompare(b.time));
return contact;
});
// rest of code here
})
.catch(err => this.handleError(err));
根据你的问题,我假设contact.sms
对象包含一个对象数组,其中time
是一个字符串(localeCompare被调用)。由于日期可以应用运算符,因此可以像对任何数字一样对它们进行排序。
const dates = [
new Date("2022-04-29T16:10:43-06:00"),
new Date("2023-04-29T16:10:43-06:00"),
new Date("2022-01-29T16:10:43-06:00")
]
console.log(dates)
dates.sort((a, b) => a - b)
console.log(dates)
对你来说,
// Sorts dates where the least recent is first.
contact.sms = contact.sms.sort((a,b) => new Date(a.time) - new Date(b.time));
您可以将它们解析为Date
并比较毫秒:
contact.sms.sort((a,b) => new Date(a.time) - new Date(b.time));
或者交换a
和b
,如果你想颠倒顺序。