Question Comment stocker un tableau dans localStorage? [dupliquer]


Cette question a déjà une réponse ici:

Si je n'avais pas besoin de localStorage, mon code ressemblerait à ceci:

var names=new Array(); 
names[0]=prompt("New member name?");

Cela marche. Cependant, j'ai besoin de stocker cette variable dans localStorage et cela s'avère assez têtu. J'ai essayé:

var localStorage[names] = new Array();
localStorage.names[0] = prompt("New member name?");

Où vais-je mal?


471
2017-07-28 21:14


origine


Réponses:


localStorage ne supporte que les chaînes. Utilisation JSON.stringify() et JSON.parse().

var names = [];
names[0] = prompt("New member name?");
localStorage.setItem("names", JSON.stringify(names));

//...
var storedNames = JSON.parse(localStorage.getItem("names"));

907
2017-07-28 21:23



le localStorage et sessionStorage ne peut gérer que les chaînes. Vous pouvez étendre les objets de stockage par défaut pour gérer les tableaux et les objets. Il suffit d'inclure ce script et d'utiliser les nouvelles méthodes:

Storage.prototype.setObj = function(key, obj) {
    return this.setItem(key, JSON.stringify(obj))
}
Storage.prototype.getObj = function(key) {
    return JSON.parse(this.getItem(key))
}

Utilisation localStorage.setObj(key, value) pour enregistrer un tableau ou un objet et localStorage.getObj(key) pour le récupérer. Les mêmes méthodes fonctionnent avec le sessionStorage objet.

Si vous utilisez simplement les nouvelles méthodes pour accéder au stockage, chaque valeur sera convertie en une chaîne JSON avant d'être sauvegardée et analysée avant d'être renvoyée par le getter.

La source: http://www.acetous.de/p/152


96
2018-04-11 15:40



Utilisation JSON.stringify() et JSON.parse() comme suggéré par non! Cela évite le problème, peut-être rare, mais possible, d’un nom de membre incluant le délimiteur (par exemple, nom de membre three|||bars).


15
2017-08-02 21:33



Je viens de créer ceci:

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');

5
2017-10-16 18:44



Une autre solution serait d'écrire un wrapper qui stocke le tableau comme ceci:

localStorage.setItem('names_length', names.length);
localStorage.setItem('names_0', names[0]);
localStorage.setItem('names_1', names[1]);
localStorage.setItem('names_' + n, names[n]);

Supprime le surcoût de la conversion en JSON, mais serait gênant si vous avez besoin de supprimer des éléments, car vous auriez à ré-indexer le tableau :)


4
2018-01-09 21:53



L'approche JSON fonctionne, c'est-à-dire 7 vous avez besoin de json2.js, cela fonctionne parfaitement et malgré le commentaire qui dit autrement, il y a localStorage dessus. il semble vraiment être la meilleure solution avec le moins de tracas. Bien sûr, on pourrait écrire des scripts pour faire essentiellement la même chose que json2, mais il y a peu d'intérêt à cela.

Au moins avec la chaîne de version suivante, il y a localStorage, mais comme indiqué, vous devez inclure json2.js car ce n'est pas inclus par le navigateur lui-même: 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) (J'aurais fait un commentaire sur la réponse, mais je ne peux pas).


3
2018-04-26 10:04