0

我正在尝试模拟操作系统的最短作业优先技术,并且我目前坚持将时间映射到进程到达的时间。

我有这个对象数组

var arr = 
[
  {
    "job"      : "J1",
    "at"       : 3
  },
  {
    "job"      : "J2",
    "at"       : 0
  },
  {
    "job"      : "J3",
    "at"       : 5
  },
  {
    "job"      : "J4",
    "at"       : 3
  }
]

我做的第一件事是根据到达时间对数组进行排序at

function compare(a,b) {
  if (a.at < b.at)
     return -1;
  if (a.at > b.at)
    return 1;
  return 0;
}

sorted = arr.sort(compare);

现在我想将它存储在一个表中,这样:

-------------------------
|    Time   |  Process  |
-------------------------
|     0     |     ?     |
-------------------------
|     1     |     ?     |
-------------------------
|     2     |     ?     |
-------------------------
|     3     |     ?     |
-------------------------
|         ...           |
-------------------------
|         ...           |
-------------------------
|         ...           |
-------------------------

我所做的是找出最大的对象at

maxTime = 0;
$.each(arr, function(k, v){
  maxTime = v.at > maxTime ? v.at : maxTime;
});

并开始循环

var row = [];
for (var i = 0; i <= maxTime; i++) {
  row.push('<tr>');
  row.push('<td>' + i);
  var arrived = true;
  for (var j = 0; j < sorted.length; j++) {
    arrived = false;
    if(sorted[j].at == i) {
      row.push('<td>' + sorted[j].job);
    }
  };
  if(!arrived) {
     row.push('<td>');
  }
};
$('table').append(row.join(''));

而这会发生什么小提琴。如果您可以看到创建的其他单元格,那么我找不到我缺少的内容。也许稍后我会问一下爆发时间。

4

1 回答 1

0

我简化了它,删除了布尔值,然后只推入任何相等的值

for (var i = 0; i <= maxTime; i++) {
  row.push('<tr>');
  row.push('<td>' + i);
  var arrivedJobs = "";
  for (var j = 0; j < sorted.length; j++) {
    if(sorted[j].at == i) {
      arrivedJobs += sorted[j].job + "," ;
    }
  };
  row.push('<td>' + arrivedJobs.replace(/(^,)|(,$)/g, ""));
};
于 2013-10-14T13:26:59.493 回答