错误“未定义无法读取属性‘formatTime’”中的Array.sort()函数

时间:2019-02-02 19:45:52

标签: javascript multidimensional-array ember.js

我有一个的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() {函数{1}},并且正确地执行,没有错误。该错误似乎是console.log(formatTime(rowArray[0][columnIndex]))函数的局部错误。

另外,我是比较新在这里,所以我们还是我知道如果你需要任何详细信息,如果有什么问题我的职务。

编辑:这是从不同的How to access the correct `this` inside a callback?,因为我的解决方案仅需要一个箭头功能。我很欣赏的深入的解释虽然

2 个答案:

答案 0 :(得分:1)

将其更改为箭头功能,以便可以在内部使用此上下文。在常规函数中,除非并且除非将其引用为局部变量或将其更改为如下箭头功能,否则您将无法使用它

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

答案 1 :(得分:0)

在compareFunction中未定义。尝试:

this.messagingService.requestPermission()