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



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

我有这个对象数组

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

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

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

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, ""));
};

最新更新