У меня есть функция 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) => {})



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Измените его на функцию стрелки, чтобы этот контекст был доступен внутри. В обычной функции вы не получите к ней доступ до тех пор, пока вы не сошлетесь на локальную переменную или не измените ее на функцию стрелки, как показано ниже.
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;
});
Возможный дубликат Как получить доступ к правильному `this` внутри обратного вызова?