如何在localStorage中存储数组?

时间:2010-07-28 21:14:27

标签: javascript html arrays html5 local-storage

如果我不需要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 个答案:

答案 0 :(得分:1017)

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

答案 1 :(得分:103)

localStoragesessionStorage只能处理字符串。您可以扩展默认存储对象以处理数组和对象。只需包含此脚本并使用新方法:

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字符串,然后才会被getter返回。

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

答案 2 :(得分:16)

根据no建议使用JSON.stringify()JSON.parse()!这可以防止包含分隔符的成员名称可能很少但可能存在问题(例如成员名称three|||bars)。

答案 3 :(得分:6)

刚刚创建了这个:

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

答案 4 :(得分:3)

JSON方法有效,即7,你需要json2.js,它可以完美地工作,尽管有一条评论说不然,它上面有localStorage。它似乎是最麻烦的最佳解决方案。当然,人们可以编写脚本来完成与json2基本相同的操作,但是没有什么意义。

至少使用以下版本字符串有localStorage,但是如上所述,您需要包含json2.js,因为浏览器本身不包含它: 4.0(兼容; 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) (我本来是对答复做出评论,但不能)。

答案 5 :(得分:2)

另一种解决方案是编写一个存储数组的包装器:

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