协慌网

登录 贡献 社区

如何将数组存储在 localStorage 中?

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

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

这行得通。但是,我需要将此变量存储在 localStorage 中,事实证明它很顽固。我试过了:

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

我要去哪里错了?

答案

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

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

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