我正在尝试模拟操作系统的最短作业优先技术, 我目前正忙着绘制流程到达的时间。
我有这个对象数组
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发生的事情。如果你能看到创建了额外的单元格,我找不到我错过的内容。也许以后我会问爆发时间。
答案 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, ""));
};