如何将数组存储在localStorage中?

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

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

这工作。 但是,我需要将这个variables存储在localStorage中,并且certificate它是相当固执的。 我试过了:

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

我哪里错了?

localStorage只支持string。 使用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")); 

localStoragesessionStorage只能处理string。 您可以扩展默认存储对象来处理数组和对象。 只要包含这个脚本并使用新的方法:

 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对象使用相同的方法。

如果您只是使用新方法来访问存储,则每个值在被getter返回之前都会在保存和parsing之前转换为JSONstring。

来源: http : //www.acetous.de/p/152

使用JSON.stringify()JSON.parse() ,build议使用no! 这可以防止包含分隔符的成员名称(例如,成员名称three

bars )的罕见但可能的问题。

另一个解决scheme是编写一个存储这个数组的包装器:

 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的开销,但是如果你需要删除元素,会很麻烦,因为你必须重新索引数组:)

刚刚创build了这个:

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方法的工作原理,即7你需要json2.js,它完美的作品,尽pipe有一个评论说,否则有它的localStorage。 它似乎是最简单的最好的解决scheme。 当然,我们可以编写脚本来做与json2基本相同的事情,但是这里没有什么意义。

至less在下面的版本string中有localStorage,但是如你所说,你需要包含json2.js,因为它不包含在浏览器本身中: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; .NET 4.0C; .NET 4.0E; Zune 4.7)(我会对此做出评论答复,但不能)。