将sessionStorage限制为x个条目

limit sessionStorage to x entries

本文关键字:sessionStorage      更新时间:2023-09-26

我像使用psuedo javascript控制台一样使用html5 sessionStorage,这样我就可以检索以前记录在那里的错误。我试图限制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();
  }
}