首先在javascript上模拟出来

时间:2013-10-11 12:43:51

标签: 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', 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};
};

现在,如果你能看到模数,我认为是造成问题的。

// eg
   [1,2,3,4,5,6].fifo(3);
// returns
   [1], [1,2], [1,2,3], [4,2,3], [4,5,3], [4,5,6]

虽然这是正确的,但如果数字i等于frames并且modulo'ed时,排序将会失败,余数将为零,因此无效。

// 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;
};

0 个答案:

没有答案