如何根据我的情况实现这些排序功能

时间:2019-05-23 16:23:59

标签: javascript string typescript sorting object

嘿,请不要立即关闭我,因为我不知道“基本知识”之类的内容,如果我在这里发布,那是因为我已经尝试了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);

约会数组的结果相同

我到底想念什么?

2 个答案:

答案 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; 
 })
  1. 基于horaInicialEpoch的排序

    arr2.sort((a,b) => a.horaInicialEpoch - b.horaInicialEpoch)

P.S仅在需要呈现给人类消费时才使用时间的字符串表示形式。以编程方式使用datetime时,请使用自纪元以来的秒。