0

我正在使用 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
    }}

我可能错过了一些非常简单的东西。谁能帮忙?

4

1 回答 1

1

你必须想象这sessionStorage是一个字典,其中每个值都由一个键映射,如果你想在超过最大计数后删除最旧的条目,你必须映射到像队列这样的数据,队列很容易在 JavaScript 中用数组(push withArray.prototype.push()和 pop with 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();
  }
}
于 2015-03-05T02:03:24.880 回答