嘿,请不要立即关闭我,因为我不知道“基本知识”之类的内容,如果我在这里发布,那是因为我已经尝试了2个小时来做这个简单的事情,而且我合法不能而且需要帮助
我已经使用了该线程Javascript - sort objects in an array alphabetically on one property of the array的顶部帖子,还有其他一些帖子,它从未根据我指出的属性对对象数组进行排序,我不知道是否是否缺少某些东西 这就是我的对象数组的样子,我想通过horaInicial属性对它们进行排序,该属性是一个字符串,保留了iso 8601
Array(3)
0: Appointment
area: "S. Eter"
data: "2019-05-23T12:40:55.155+01:00"
description: "Sprint CS WEB"
horaFinal: "2019-05-21T11:40:59.028Z"
horaInicial: "2019-05-21T11:40:59.028Z"
id: 17
__proto__: Object
1: Appointment
area: "S. Confiança"
data: "2019-05-23T12:40:55.155+01:00"
description: "AR"
horaFinal: "2019-05-21T16:45:15.448+01:00"
horaInicial: "2019-05-21T16:00:15.448+01:00"
id: 18
__proto__: Object
2: Appointment
area: "djdndjsnsnsnzznj"
data: "2019-05-23T11:18:24.596+01:00"
description: "xbxnxnsnsjsjdjdkssjdjsjsk"
horaFinal: "2019-05-22T10:42:46.770Z"
horaInicial: "2019-05-22T11:41:46.769+01:00"
id: 23
__proto__: Object
然后我尝试使用其他线程中的函数对它进行排序,例如:
this.appointments.sort(function(a, b) {
var textA = a.horaInicial.toUpperCase();
var textB = b.horaInicial.toUpperCase();
return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
});
console.log(this.appointments);
约会数组的结果相同
我到底想念什么?
答案 0 :(得分:0)
您没有解析Date。这意味着您正在做的是比较字符串。不是日期。
要使用JavaScript sort()
函数并接收预期的输出,您需要在其中解析日期。要按对象horaInicial
对它们进行排序,可以执行以下操作:
yourArray.sort(function(a,b){
return new Date(b.horaInicial) - new Date(a.horaInicial);
});
这将返回按日期排序的desc数组,因此您只需使用yourArray.reverse()
即可将其转换为asc。
看一个例子:
let yourArray = [
{
area: "S. Eter",
data: "2019-05-23T12:40:55.155+01:00",
description: "Sprint CS WEB",
horaFinal: "2019-05-21T11:40:59.028Z",
horaInicial: "2019-05-21T11:40:59.028Z",
id: 17
},
{
area: "S. Confiança",
data: "2019-05-23T12:40:55.155+01:00",
description: "AR",
horaFinal: "2019-05-21T16:45:15.448+01:00",
horaInicial: "2019-05-21T16:00:15.448+01:00",
id: 18
},
{
area: "djdndjsnsnsnzznj",
data: "2019-05-23T11:18:24.596+01:00",
description: "xbxnxnsnsjsjdjdkssjdjsjsk",
horaFinal: "2019-05-22T10:42:46.770Z",
horaInicial: "2019-05-22T11:41:46.769+01:00",
id: 23
}
];
// BEFORE SORTING THE ARRAY
document.write("Before:<br>");
yourArray.forEach((i)=>{
document.write(new Date(i.horaInicial) + "<br>");
});
//SORT THE ARRAY
yourArray.sort(function(a,b){
return new Date(b.horaInicial) - new Date(a.horaInicial);
});
// AFTER SORTING THE ARRAY
document.write("<br>After desc:<br>");
yourArray.forEach((i)=>{
document.write(new Date(i.horaInicial) + "<br>");
});
// REVERSING ARRAY
yourArray.reverse();
// AFTER SORTING AND REVERSING ARRAY
document.write("<br>After asc:<br>");
yourArray.forEach((i)=>{
document.write(new Date(i.horaInicial) + "<br>");
});
答案 1 :(得分:0)
为什么要使用字母数字比较对时间戳进行排序?将它们转换为纪元时间戳,然后使用所得数字进行排序。
1。将时间戳转换为时代-
arr2 = arr.map(item => {
item.horaInicialEpoch = new Date(item.horaInicial).getTime();
return item;
})
基于horaInicialEpoch的排序
arr2.sort((a,b) => a.horaInicialEpoch - b.horaInicialEpoch)
P.S仅在需要呈现给人类消费时才使用时间的字符串表示形式。以编程方式使用datetime时,请使用自纪元以来的秒。