Ошибка «Невозможно прочитать свойство« formatTime »неопределенного» в функции array.sort ()

У меня есть функция array.sort(), которая сортирует время, однако она продолжает возвращать эту ошибку. Вот мой код:

  sortTime(columnIndex, sortingAZ){
  var rowArray = this.get('tableArr').slice(0); //gets array of arrays
    rowArray.sort(function(a,b) {
        var time1 = this.formatTime(a[columnIndex]); //formats time into military time
        var time2 = this.formatTime(b[columnIndex]);
        return time1 - time2;
        });

и вот вызываемая функция formatTime:

   formatTime(time){

//seperates time into hours and minutes
var colonIndex = time.search(":");
var hour = parseInt(time.substring(0, colonIndex));
var minute = time.substring(colonIndex+1, time.length);
if (time.search("pm")>=0&&hour!=12){ //if it is pm, add 12 to convert to military time (except 12 pm)
    hour+=12;
}
else if (time.search("am")>=0&&hour==12){ //if it is 12 am, set hour to 0
hour = 0;
}
var milTime = hour.toString()+minute.toString(); //recombine hour and minute
milTime = parseInt(milTime);
return milTime;
}

Я проверил функцию formatTime(), вызвав console.info(formatTime(rowArray[0][columnIndex])), и она выполняется правильно, без ошибок. Ошибка кажется локальной для функции rowArray.sort().

Кроме того, я здесь относительно недавно, поэтому дайте мне знать, если вам нужна дополнительная информация или что-то не так с моим постом.

EDIT: это отличается от Как получить доступ к правильному `this` внутри обратного вызова?, потому что для моего решения требуется только функция стрелки. Я ценю подробное объяснение это, хотя

Используйте функцию стрелки rowArray.sort((a,b) => {})

adiga 02.02.2019 20:49
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
77
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Измените его на функцию стрелки, чтобы этот контекст был доступен внутри. В обычной функции вы не получите к ней доступ до тех пор, пока вы не сошлетесь на локальную переменную или не измените ее на функцию стрелки, как показано ниже.

   rowArray.sort((a,b) => {
    var time1 = this.formatTime(a[columnIndex]); //formats time into military time
    var time2 = this.formatTime(b[columnIndex]);
    return time1 - time2;
    });

это не определено в функции сравнения. пытаться:

sortTime(columnIndex, sortingAZ){
  var rowArray = this.get('tableArr').slice(0); //gets array of arrays
var that = this;
    rowArray.sort(function(a,b) {
        var time1 = that.formatTime(a[columnIndex]); //formats time into military time
        var time2 = that.formatTime(b[columnIndex]);
        return time1 - time2;
        });

Другие вопросы по теме