Jak zapisać tablicę w localStorage? [duplikat]

To pytanie ma już odpowiedź tutaj:

Gdybym nie potrzebował localStorage, mój kod wyglądałby tak:

var names=new Array(); 
names[0]=prompt("New member name?");
To działa. Jednak muszę przechowywać tę zmienną w localStorage i okazuje się dość uparty. Próbowałem:
var localStorage[names] = new Array();
localStorage.names[0] = prompt("New member name?");

Gdzie idę źle?

Author: Peter Mortensen, 2010-07-29

6 answers

localStorage obsługuje tylko ciągi. Użyj JSON.stringify() i JSON.parse().

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

//...
var storedNames = JSON.parse(localStorage.getItem("names"));
 927
Author: Dagg Nabbit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-26 11:13:29

localStorage i sessionStorage mogą obsługiwać tylko łańcuchy. Domyślne obiekty pamięci masowej można rozszerzyć o tablice i Obiekty. Po prostu dołącz ten skrypt i użyj nowych metod:

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

Użyj localStorage.setObj(key, value), aby zapisać tablicę lub obiekt i localStorage.getObj(key), aby ją odzyskać. Te same metody działają z obiektem sessionStorage.

Jeśli tylko użyjesz nowych metod, aby uzyskać dostęp do magazynu, każda wartość zostanie przekonwertowana na łańcuch JSON przed zapisaniem i przetworzona, zanim zostanie zwrócona przez getter.

źródło: http://www.acetous.de/p/152

 101
Author: Sebastian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-11 15:40:44

Użyj JSON.stringify() i JSON.parse() zgodnie z sugestią no! Zapobiega to rzadkiemu, ale możliwemu problemowi z nazwą członka, która zawiera ogranicznik (np. nazwa członka three|||bars).

 14
Author: jayeff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-15 18:20:08

Just created this:

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
Author: Klederson Bueno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-16 18:49:55

Podejście JSON działa, na ie 7 potrzebujesz json2.js, z nim działa idealnie i mimo jednego komentarza mówiącego inaczej jest na nim localStorage. to naprawdę wydaje się najlepszym rozwiązaniem z najmniejszym kłopotem. Oczywiście można pisać skrypty, aby zrobić zasadniczo to samo, co robi json2, ale nie ma w tym sensu.

Przynajmniej z następującym ciągiem wersji jest localStorage, ale jak już wspomniałem, musisz dołączyć json2.js bo to nie jest zawarte przez przeglądarkę itself: 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) (Ja bym to skomentował w odpowiedzi, ale nie mogę).

 3
Author: Lassi Kinnunen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-26 10:04:28

Innym rozwiązaniem byłoby napisanie wrappera, który przechowuje tablicę w następujący sposób:

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

Usuwa nagłówek konwersji do JSON, ale byłoby irytujące, jeśli trzeba usunąć elementy, ponieważ trzeba by ponownie indeksować tablicę:)

 2
Author: Znarkus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-09 21:53:34