如何在localStorage中存储数组?

Dav*_*vid 585 html javascript arrays html5 local-storage

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

var names=new Array(); 
names[0]=prompt("New member name?");
Run Code Online (Sandbox Code Playgroud)

这有效.但是,我需要将这个变量存储在localStorage中,并且证明它非常顽固.我试过了:

var localStorage[names] = new Array();
localStorage.names[0] = prompt("New member name?");
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

Dag*_*bit 1085

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"));
Run Code Online (Sandbox Code Playgroud)

  • @SaifBechan不要担心IE 6/7,我们在谈论`localStorage` (381认同)
  • @Howdy_McGee由于`localStorage`只支持字符串,因此必须将数组转换为字符串格式.执行此操作的最佳方法是将其转换为`JSON`数组,因为它很容易在两种状态之间进行转换(`JSON`只是一小段字符串数据).如果那是你不理解的,你可能想要阅读`JSON`.:) (12认同)
  • 有人可以解释你为什么要这样做以及发生了什么事吗? (6认同)
  • IE7及更早版本不支持JSON. (4认同)
  • @JonathanTonge,如果你愿意的话,你可以做一些像`JSON.parse(localStorage ["names"] || null)的东西. (3认同)
  • @SaifBechan`if(typeof JSON =="undefined"){alert("升级浏览器."); }` (2认同)

小智 110

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))
}
Run Code Online (Sandbox Code Playgroud)

使用localStorage.setObj(key, value)保存一个数组或对象,并localStorage.getObj(key)对其进行检索.相同的方法适用于该sessionStorage对象.

如果您只是使用新方法来访问存储,则在保存和解析之前,每个值都将转换为JSON字符串,然后由getter返回.

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


jay*_*eff 17

使用JSON.stringify()JSON.parse()没有建议!这可以防止包含分隔符(例如成员名称three|||bars)的成员名称的罕见但可能的问题.

  • 这并没有提供问题的答案.要对作者进行批评或要求澄清,请在帖子下方留言. (3认同)
  • @ J0HN:是的,我做到了.从什么时候开始是会员声誉打破规则的好理由?事实上,推荐删除的自动消息并没有特别提及*不*发表评论作为答案,并建议海报等到他们有足够的声誉评论和向上投票直到那时?海报说这不是答案; 还有什么证据需要存在? (2认同)
  • @ChiefTwoPencils:一些历史背景:当我发布此评论时,接受的答案建议进行连接并使用“ |||”分割 由伊恩(注意:此答案不再存在)。因为我认为此答案实际上有害,所以我发布了答案。今天,不再需要我的无答案的答案(正确的答案已被接受,并且有健康的赞成票)。我对指南不太熟悉:是否可以删除我的“答案”? (2认同)

小智 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');
Run Code Online (Sandbox Code Playgroud)

  • 这是我正在寻找的东西,除了它会走动所提供对象的键并在每个中保存(单个)链接值.非常感激激励. (3认同)