将 sessionStorage 限制为 x 个条目

limit sessionStorage to x entries

我正在使用 html5 sessionStorage 就像一个伪 javascript 控制台,所以我可以检索以前记录在那里的错误。我正在尝试限制 sessionStorage 中的条目数,这样我就不会在超过最大条目数时通过删除最旧的条目来结束数千个条目。

我已经编写了以下 javascript 代码,但它不起作用 - 当超过最大计数时它不会删除条目。

maxlen=100;
sessionlen=window.sessionStorage.length; // this returns the correct count
if(sessionlen>maxlen){
    difference=sessionlen-maxlen; // this returns the correct difference
    for(i=0;i<difference;i++){
        window.sessionStorage.removeItem(0); // this isn't happening
    }}

我可能漏掉了一些非常简单的东西。有人可以帮忙吗?

你必须想象 sessionStorage 是一个字典,其中每个值都由一个键映射,如果你想在超过最大计数后删除最旧的条目,你必须像队列一样映射到数据,队列很容易在 JavaScript 中用数组实现(用 Array.prototype.push() 压入,用 Array.prototype.shift 弹出),但是你的 id 没有精确映射到数组的索引(id 可以是任何东西)那么如何使用另一个数据结构来保存您正在保存的 id 的顺序?让我们调用时间结构 idQueue,每当达到最大容量或任何需要限制此数组大小的东西时,您只需 pop 它,即使用 .shift。由于这需要在 sessionStorage 结构中复制,因此每个操作(推送和弹出)都在两个结构上完成:

var limit = 10;
var idQueue = [];

function pushToStorage(id, value) {
  idQueue.push(id);
  window.sessionStorage.setItem(id, value);
}

function popFromStorage() {
  var oldest = idQueue.shift();
  window.sessionStorage.removeItem(oldest);
}

function checkLength() {
  while (idQueue.length > limit) {
    popFromStorage();
  }
}