在javascript上模拟先进先出
我用javascript模拟了一个先进先出的作业调度,我起初认为它很完美,但意识到它在某些条件下无法工作在javascript上模拟先进先出,javascript,jquery,sorting,fifo,Javascript,Jquery,Sorting,Fifo,我用javascript模拟了一个先进先出的作业调度,我起初认为它很完美,但意识到它在某些条件下无法工作 Array.prototype.fifo = function(frames) { var results = [], result = []; for (var i = 0; i < this.length; i++) { result = result.slice(0); var inObjects = result.inObjects('page', th
Array.prototype.fifo = function(frames) {
var results = [], result = [];
for (var i = 0; i < this.length; i++) {
result = result.slice(0);
var inObjects = result.inObjects('page', this[i]);
if(result.length == frames && !inObjects) {
result[i%frames] = page: this[i];
} else if (!inObjects) {
result.push(page: this[i]);
}
results.push(result);
};
return {result: results};
};
虽然这是正确的,但如果数字i
等于帧
,排序将失败,并且当模化时,剩余部分将为零,因此不起作用
// e.g.
// [1,1,1,2,3,4,5,6].fifo(3)
// returns
// [1], [1], [1], [1,2], [1,2,3], [1,2,4], [5,2,4], [5,6,4]
我的最佳选择是将age
属性保存到每个页面,并将其作为对象推送,以跟踪谁将被替换。你怎么认为?有没有更简单的方法可以做到这一点
编辑
对于该Array.prototype.inObject
,我正在检查对象数组中是否存在当前值
Array.prototype.inObjects = function(key, value) {
for (var i = 0; i < this.length; i++) {
if(this[i].hasOwnProperty(key) && this[i][key] == value){
return true;
}
};
return false;
};
Array.prototype.inObjects=函数(键,值){
for(var i=0;i
什么是Array.prototype.inObjects
?已编辑。谢谢你的提问,我很困惑。javascript数组是否已经能够使用push
和shift
模拟FIFO?shift和pop仅删除第一个元素或最后一个元素…仅将内容作为最后一个元素推送,而不是推送到最早的元素所在的位置。
Array.prototype.inObjects = function(key, value) {
for (var i = 0; i < this.length; i++) {
if(this[i].hasOwnProperty(key) && this[i][key] == value){
return true;
}
};
return false;
};