首页 文章

如何在localStorage中存储数组? [重复]

提问于
浏览
496

这个问题在这里已有答案:

如果我不需要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 回答

  • 5

    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)(我本来可以对此发表评论答复,但不能) .

  • 3

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

  • 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

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

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

  • 950

    刚刚创建了这个:

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

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

相关问题