Как реализовать эти функции сортировки в моей ситуации - PullRequest
1 голос
/ 23 мая 2019

Эй, пожалуйста, не закрывайте меня сразу же, потому что я не знаю "основы" или что-то еще, если я здесь на самом деле публикую это, потому что я пытался в течение 2 часов сделать эту простую вещь, и я законно не может и не нуждается в помощи

Я использовал верхние посты этой темы Javascript - сортировка объектов в массиве по алфавиту по одному свойству массива и еще по паре, он никогда не сортирует мой массив объектов, основываясь на свойство, на которое я указываю, я не знаю, упускаю ли я что-то или нет это то, как выглядит мой массив объектов, и я хочу отсортировать их по свойству 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 голосов
/ 23 мая 2019

Зачем вам сортировать метки времени, используя буквенно-цифровое сравнение?Преобразуйте их в метки времени эпохи, а затем сортируйте, используя полученные числа.

1. Преобразовать метки времени в эпоху -

 arr2 = arr.map(item => {
    item.horaInicialEpoch = new Date(item.horaInicial).getTime();
    return item; 
 })

Сортировка на основе horaInicialEpoch

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

PS Используйте только строковые представления времени, когда вам нужно представить их для потребления человеком.При программном использовании даты и времени используйте секунды с начала эпохи.

0 голосов
/ 23 мая 2019

Вы не анализируете Дата .Это означает, что вы сравниваете строки.Не даты.

Чтобы использовать функцию JavaScript sort() и получить ожидаемый результат, вам необходимо проанализировать даты внутри нее.Чтобы отсортировать их по вашему объекту horaInicial, вы можете сделать это:

yourArray.sort(function(a,b){
  return new Date(b.horaInicial) - new Date(a.horaInicial);
});

И это вернет массив desc, упорядоченный по дате, поэтому для преобразования его в asc вы можете просто использовать yourArray.reverse().

Посмотрите на пример:

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>");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...