2015-03-05 1 views
0

Я использую html5 sessionStorage как консоль javascript psuedo, поэтому я могу получить ошибки, которые ранее были записаны там. Я пытаюсь ограничить количество записей в sessionStorage, поэтому я не получаю тысячи записей, удаляя самые старые записи по мере превышения максимального количества записей.limit sessionStorage to x entries

Я написал следующий код 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 
    }} 

У меня, вероятно, отсутствует что-то действительно простое. может ли кто-нибудь помочь?

+0

жаль, что я хотел бы упомянуть, я делаю запись ошибок в sessionStorage только с 'window.sessionStorage [ 'id'] = 'value'', а затем запустить вышеприведенный код после этого, чтобы попробовать и обрезать количество записей до max каждый раз при добавлении новой записи –

ответ

1

Вы должны представить, что sessionStorage - это словарь, в котором каждое значение отображается ключом, если вы хотите удалить самые старые записи после превышения максимального количества вы должны сопоставить данные, такие как очередь, очередь легко реализованный в JavaScript с массивом (push с Array.prototype.push() и pop с Array.prototype.shift), однако ваши идентификаторы не точно сопоставлены с индексами массива (идентификатор может быть любым), так как об использовании другой структуры данных для хранения порядка 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(); 
    } 
}