javascript - guardar - ¿Cómo almaceno una matriz en localStorage?
localstorage javascript (6)
Esta pregunta ya tiene una respuesta aquí:
- Almacenamiento de objetos en HTML5 localStorage 27 respuestas
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á demostrando ser bastante obstinado. He intentado:
var localStorage[names] = new Array();
localStorage.names[0] = prompt("New member name?");
¿A dónde me voy mal?
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'');
El enfoque de JSON funciona, en ie 7 necesita json2.js, con él funciona perfectamente y, a pesar del comentario que dice lo contrario, hay un almacenamiento local en él. Realmente parece la mejor solución con la menor molestia. Por supuesto, uno podría escribir scripts para hacer esencialmente lo mismo que json2, pero no tiene mucho sentido.
al menos con la siguiente cadena de versión hay localStorage, pero como se dijo, debe incluir json2.js porque no está incluido en el navegador: 4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident / 5.0; SLCC2 ; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; BRI / 2; NP06; .NET4.0C; .NET4.0E; Zune 4.7) (Lo habría hecho un comentario sobre la respuesta, pero no puede).
Otra solución sería escribir un contenedor que almacene la matriz de esta manera:
localStorage.setItem(''names_length'', names.length);
localStorage.setItem(''names_0'', names[0]);
localStorage.setItem(''names_1'', names[1]);
localStorage.setItem(''names_'' + n, names[n]);
Elimina la sobrecarga de convertir a JSON, pero sería molesto si necesitas eliminar elementos, ya que tendrías que volver a indexar la matriz :)
Use JSON.stringify()
y JSON.parse()
como lo sugiere no! Esto evita el problema raro pero posible de un nombre de miembro que incluye el delimitador (por ejemplo, el nombre de miembro three|||bars
).
localStorage
solo admite cadenas. Utilice 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"));
localStorage
y sessionStorage
solo pueden manejar cadenas. Puede extender los objetos de almacenamiento predeterminados para manejar matrices y objetos. Solo incluye este script y usa 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))
}
Use localStorage.setObj(key, value)
para guardar una matriz u objeto y localStorage.getObj(key)
para recuperarlo. Los mismos métodos funcionan con el objeto sessionStorage
.
Si solo utiliza los nuevos métodos para acceder al almacenamiento, todos los valores se convertirán en una cadena JSON antes de guardarlos y analizarlos antes de que el getter los devuelva.
Fuente: http://www.acetous.de/p/152