increment key in sessionStorage

269 Views Asked by At

So I have this code here

var i = 0;
function contactUs(event){
    event.preventDefault();
    var lettre = new message();
    sessionStorage.setItem("lettreNo" + i++, JSON.stringify(lettre));
    $("form")[0].reset();
}

But I know it's wrong because the key won't increment, it will just override the thing, if I go to another page and come back since this script is used by all my pages, how do I fix this?

1

There are 1 best solutions below

4
Jonas Wilms On

Just store an array inside one storage property:

const letters = JSON.parse(sessionStorage.getItem("letters")) || [];
letters.push(letter /*?*/);
sessionStorage.setItem("letters", JSON.stringify(letters));

Or if you really want this complicated key thing, it makes sense to create a helper:

function sessionArray(name) {
   let length = +sessionStorage.getItem(name);

   return {
     get(key) {
        return JSON.parse(sessionStorage.getItem(name + key));
     }, 
     set(key, value) {
        if(key >= length) this.setLength(key + 1);
        sessionStorage.setItem(name + key, JSON.stringify(value));
     },
     setLength(l) {
        length = l;
        sessionStorage.setItem(name, length);
     },
     push(value) {
        this.set(length, value);
     }
   };
 }

Usable as:

 const letters = sessionArray("letters");
 letters.push({some: "thing"});
 console.log(letters.get(0));