-1

好的,直截了当,我有这个数组:

var arr = [
        {
            "job": "j1",
            "at": 0,
            "bt": 8
        },
        {
            "job": "j2",
            "at": 2,
            "bt": 3
        },
        {
            "job": "j3",
            "at": 3,
            "bt": 1
        },
        {
            "job": "j1",
            "at": 6,
            "bt": 3
        }
    ]

其中at是到达时间,bt是突发时间。好的,我有这个排序功能:

Array.prototype.sort = function(by) {
  this.sort(function(a,b){
    if(a[by] < b[by])
      return -1;
    if(a[by] > b[by])
      return 1;
    return 0;
  });
};

根据给定参数对对象数组进行排序。现在我想迭代所有元素,然后迭代每个元素的突发时间,并在任何其他元素包含等于当前时间的到达时间时停止。当找到匹配时,比较它们的突发时间,如果另一个元素的突发时间更小,则将当前元素的经过时间减去其突发时间,然后继续下一个元素。

到目前为止,我有这个逻辑,但仍然找不到实现它的方法:

for(i = 0; i < arr.length; i++) {
    for(j = arr[i].at; j < arr[i].bt; j++){
    // some other things 
    }
}
4

1 回答 1

1

鉴于对 的计算bt,您实际上是bt按次要排序排序的。尝试这个:

Array.prototype.sort = function(by) {
    this.sort(function(a,b){
        if (a[by] < b[by])
            return -1;

        if (a[by] > b[by])
            return 1;

        if (a[by] == b[by]) {
            if (a['bt'] < b['bt']) 
                return -1;

            if (a['bt'] > b['bt'])
                 return 1;
        }

        return 0;
    });
};
于 2013-10-15T11:57:05.017 回答