关于javascript:如何在localStorage中存储数组?

How do I store an array in localStorage?

本问题已经有最佳答案,请猛点这里访问。

如果我不需要localstorage,我的代码将如下所示:

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

这是可行的。但是,我需要将这个变量存储在localstorage中,结果证明它相当顽固。我试过了:

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

我哪里出错了?


localStorage仅支持字符串。JSON.parse()JSON.stringify()和使用。

1
2
3
4
5
6
var names = [];
names[0] = prompt("New member name?");
localStorage.setItem("names", JSON.stringify(names));

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


localStoragesessionStorage只能处理字符串。你可以用默认的存储对象和对象句柄数组对。这就包括脚本和使用新的方法:

1
2
3
4
5
6
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)检索到它。该方法sessionStorage工作的对象。

如果你想用新的方法来访问的存储,每一个值将被转换为JSON字符串,它是在节能和parsed在归国的吸气剂。

组分来源:http://></www.acetous.de/P/152次>


通过使用建议的JSON.stringify()JSON.parse()!这种罕见的,但也许有可能避免的问题,包括delimiter构件名称(如构件名称three|||bars)。


这只是创造:

gist.github.com 3854049 https:///

1
2
3
4
5
6
7
8
9
10
11
//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方法的作品,你需要json2.js在线IE 7,与它的工作和它的一个perfectly尽管有评论说它有localstorage在线。它真的看起来像最好的最小二乘解的麻烦。当然,一个脚本可以对所写的东西不一样,但有一个小的json2这一点。

至少有一个与下面的字符串localstorage版本,但你需要有json2.js说因为那是不是由浏览器本身包括:4.0(MSIE 7.0;兼容;Windows NT 6.1 WOW64的三叉戟;;slcc2 .NET CLR/5;;2.0.50727 .NET CLR CLR 3.5.30729;.NET;3.0.30729 BRI / 2;np06 net4.0c;;;。。。。。。。。。。。。。。net4.0e Zune;4.7)(我会用这一评论的回复,但是不能)。


另一个解决方案将是写一包装,存储阵列像这样:

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

removes高架)转换到JSON的,但如果你需要将annoying删除元素,你将不得不重新索引的数组)