¿Cómo almaceno una matriz en localStorage? [duplicar]
Si no necesitara localStorage, mi código se vería así:
var names=new Array();
names[0]=prompt("New member name?");
Esto funciona. Sin embargo, necesito almacenar esta variable en localStorage y está resultando bastante difícil. He intentado:
var localStorage[names] = new Array();
localStorage.names[0] = prompt("New member name?");
¿Dónde me estoy equivocando?
localStorage
solo admite cadenas. Uso JSON.stringify()
y JSON.parse()
.
var names = [];
names[0] = prompt("New member name?");
localStorage.setItem("names", JSON.stringify(names));
//...
var storedNames = JSON.parse(localStorage.getItem("names"));
También puede utilizar el acceso directo para configurar/obtener elementos:
localStorage.names = JSON.stringify(names);
var storedNames = JSON.parse(localStorage.names);
El localStorage
y sessionStorage
solo puede manejar cadenas. Puede ampliar los objetos de almacenamiento predeterminados para manejar matrices y objetos. Simplemente incluya este script y use los nuevos métodos:
Storage.prototype.setObj = function(key, obj) {
return this.setItem(key, JSON.stringify(obj))
}
Storage.prototype.getObj = function(key) {
return JSON.parse(this.getItem(key))
}
Úselo localStorage.setObj(key, value)
para guardar una matriz u objeto y localStorage.getObj(key)
recuperarlo. Los mismos métodos funcionan con el sessionStorage
objeto.
Si solo usa los nuevos métodos para acceder al almacenamiento, cada valor se convertirá en una cadena JSON antes de guardarlo y se analizará antes de que el captador lo devuelva.
Utilice JSON.stringify()
y JSON.parse()
como lo sugiere no! Esto evita el problema quizás raro pero posible de que un nombre de miembro incluya el delimitador (por ejemplo, nombre de miembro three|||bars
).
Acabo de crear esto:
https://gist.github.com/3854049
//Setter
Storage.setObj('users.albums.sexPistols',"blah");
Storage.setObj('users.albums.sexPistols',{ sid : "My Way", nancy : "Bitch" });
Storage.setObj('users.albums.sexPistols.sid',"Other songs");
//Getters
Storage.getObj('users');
Storage.getObj('users.albums');
Storage.getObj('users.albums.sexPistols');
Storage.getObj('users.albums.sexPistols.sid');
Storage.getObj('users.albums.sexPistols.nancy');