841 Stimmen

Wie speichere ich ein Array in localStorage?

Wenn ich localStorage nicht bräuchte, würde mein Code wie folgt aussehen:

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

Das funktioniert. Ich muss diese Variable jedoch in localStorage speichern, und sie erweist sich als ziemlich hartnäckig. Ich habe es versucht:

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

Was mache ich falsch?

1583voto

Dagg Nabbit Punkte 72150

localStorage unterstützt nur Zeichenketten. Verwenden Sie 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"));

Sie können auch den direkten Zugriff verwenden, um ein Element zu setzen/zu holen:

localstorage.names = JSON.stringify(names);
var storedNames = JSON.parse(localStorage.names);

19voto

jayeff Punkte 1579

Verwenden Sie JSON.stringify() y JSON.parse() wie von no! vorgeschlagen Dies verhindert das vielleicht seltene, aber mögliche Problem eines Mitgliedsnamens, der das Trennzeichen enthält (z.B. Mitgliedsname three|||bars ).

9voto

Klederson Bueno Punkte 330

Ich habe dies gerade erstellt:

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

4voto

Lassi Kinnunen Punkte 411

Der JSON-Ansatz funktioniert, auf ie 7 benötigen Sie json2.js, mit ihm funktioniert es perfekt und trotz der einen Kommentar, der etwas anderes sagt, gibt es localStorage auf sie. es scheint wirklich wie die beste Lösung mit dem geringsten Aufwand. Natürlich könnte man Skripte schreiben, um im Wesentlichen die gleiche Sache wie json2 tut, aber es gibt wenig Sinn, dass.

zumindest mit dem folgenden Versionsstring gibt es localStorage, aber wie gesagt, man muss json2.js einbinden, weil das nicht vom Browser selbst eingebunden wird: 4.0 (kompatibel; 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) (Ich hätte dies als Kommentar in die Antwort eingefügt, aber das geht nicht).

2voto

Znarkus Punkte 22226

Eine andere Lösung wäre, einen Wrapper zu schreiben, der das Array wie folgt speichert:

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

Entfernt den Overhead der Konvertierung in JSON, wäre aber ärgerlich, wenn Sie Elemente entfernen müssen, da Sie das Array neu indizieren müssten :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X