Как сохранить массив в localStorage? [дубликат]
этот вопрос уже есть ответ здесь:
Хранение объектов в HTML5 localStorage
27 ответов
Если бы мне не нужен был localStorage, мой код выглядел бы так:
var names=new Array();
names[0]=prompt("New member name?");
это работает. Однако мне нужно сохранить эту переменную в localStorage, и она оказывается довольно упрямой. Я пробовал:
var localStorage[names] = new Array();
localStorage.names[0] = prompt("New member name?");
где я ошибаюсь?
6 ответов:
localStorageподдерживает только строки. ИспользуйтеJSON.stringify()иJSON.parse().var names = []; names[0] = prompt("New member name?"); localStorage.setItem("names", JSON.stringify(names)); //... var storedNames = JSON.parse(localStorage.getItem("names"));
The
localStorageиsessionStorageможет обрабатывать только строки. Вы можете расширить хранилище по умолчанию-объекты для обработки массивов и объектов. Просто включите этот скрипт и используйте новые методы:Storage.prototype.setObj = function(key, obj) { return this.setItem(key, JSON.stringify(obj)) } Storage.prototype.getObj = function(key) { return JSON.parse(this.getItem(key)) }использовать
localStorage.setObj(key, value)для сохранения массива или объекта иlocalStorage.getObj(key)для его получения. Те же методы работают с
использовать
JSON.stringify()иJSON.parse()как полагают, нет! Это предотвращает, возможно, редкую, но возможную проблему имени члена, которое включает разделитель (например, имя членаthree|||bars).
только что создала этот:
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');
подход JSON работает, на ie 7 вам нужен json2.js, с ним он отлично работает и, несмотря на один комментарий, говорящий иначе, на нем есть localStorage. это действительно кажется лучшим решением с наименьшими хлопотами. Конечно, можно было бы написать сценарии, чтобы сделать по существу то же самое, что и json2, но в этом мало смысла.
по крайней мере, со следующей строкой версии есть localStorage, но, как сказано, вам нужно включить json2.js, потому что это не включено сам браузер : 4.0 (совместимый; MSIE 7.0; система NT 6.1; WoW64 будет; и Trident/5.0; SLCC2; .ЧИСТАЯ СРЕДА CLR 2.0.50727; .ЧИСТАЯ СРЕДА CLR 3.5.30729; .ЧИСТАЯ СРЕДА CLR 3.0.30729; БРАЙ/2; NP06; .Серии net4.0С; .Серии net4.0Е; в Zune 4.7) (Я бы сделал это комментарий к ответу, но не могу).
другим решением было бы написать оболочку, которая хранит массив следующим образом:
localStorage.setItem('names_length', names.length); localStorage.setItem('names_0', names[0]); localStorage.setItem('names_1', names[1]); localStorage.setItem('names_' + n, names[n]);удаляет накладные расходы на преобразование в JSON, но будет раздражать, если вам нужно удалить элементы, так как вам придется повторно индексировать массив :)
Comments