Javascript模拟最短作业优先,将时间映射到到达时间

时间:2013-10-14 12:50:19

标签: javascript jquery operating-system

我正在尝试模拟操作系统的最短作业优先技术, 我目前正忙着绘制流程到达的时间。

我有这个对象数组

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(''));

这就是fiddle发生的事情。如果你能看到创建了额外的单元格,我找不到我错过的内容。也许以后我会问爆发时间。

1 个答案:

答案 0 :(得分: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, ""));
};