如何在本地存储中存储数组?

2022-08-29 22:28:21

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

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

这有效。但是,我需要将此变量存储在localStorage中,并且它被证明是相当顽固的。我试过了:

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

我哪里出错了?


答案 1

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

您还可以使用直接访问来设置/获取项目:

localstorage.names = JSON.stringify(names);
var storedNames = JSON.parse(localStorage.names);

答案 2

和 只能处理字符串。您可以扩展默认存储对象来处理数组和对象。只需包含此脚本并使用新方法: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 返回之前进行解析。