0

javascriptを使用してCPUの先入れ先出しジョブスケジューリングをシミュレートしようとしています。

var frames = 3, pages = [1,2,3,1,1,6,3,2], result = {};

この結果を達成するためにループしたかった:

1 | 1 | 1 | 1 | 1 | 6 | 6 | 6
  | 2 | 2 | 2 | 2 | 2 | 2 | 2
        3 | 3 | 3 | 3 | 3 | 3

明らかに、結果の配列で置き換えられたのは、先にプッシュされたもので、この例では「1」です。

私はこの解決策を思いつきました:

for (var i = 0; i < pages.length; i++) {
    for (var j = 0; j < frames; j++) {
      if(!contains(pages[i], result)){
        result.push({life : i, pages : pages[i]});
        if (result.length > frames) {
          var temp = result.pop();
          result[getOldest(result)] = temp;
        };
      }
      console.log(result);
    };
  };

という名前の関数がcontainsあり、getOldestそれが何をするかをほぼ説明していることに気付いた場合は、containstrue または false を返し、最も古いプロパティgetOldestを含むオブジェクトのインデックスを返します。age

しかし、私はそれをすべて間違っているようです..代わりにこの結果を受け取っています

1 | 1 | 1 | 1 | 1 | 1 | ... 1
2 | 2 | 2 | 2 | 2 | 2 | ... 1
2 | 2 | 2 | 2 | 2 | 2 | ... 1

要求に応じて、2 つの機能:

var contains = function(needle, haystack) {
  if(haystack.indexOf(needle) >= 0) return true;
  return false;
}

var getOldest = function(arr) {
  var oldest;
  var count = Object.keys(arr).length;
  for (var i = 0; i < count - 1; i++) {
    if (arr[i].life < arr[i+1].life) {
      oldest = Object.keys(arr)[i];
    } else {
      oldest = Object.keys(arr)[i+1];
    }
  };
  return oldest;
}
4

0 に答える 0