将sessionStorage限制为x条目

时间:2015-03-05 01:41:52

标签: javascript sessionstorage

我正在使用html5 sessionStorage,就像一个psuedo 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
    }}

我可能错过了一些非常简单的事情。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

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

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();
  }
}
相关问题