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

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

问题描述:

这是我的代码。我尝试了几天后创建一个对象数组,然后我将其存储在本地存储中。这是问题所在,我需要先从本地存储获取现有值。如何在本地存储中存储对象数组?

然后我需要添加新的数据对象到现有的数组。然后我将它转换成JSON,以便我可以将它存储回本地存储。

onRegisterSubmit(){ 
    const user = { 
     a: this.a, 
     b: this.b, 
     c: this.c, 
     id: Date.now() 
    }  

    var abc = []; 
    var get = JSON.parse(localStorage.getItem('user')); 
    abc = [get]; 
    abc.push(user); 

    localStorage.setItem('user', JSON.stringify(abc)); 

    console.log(JSON.stringify(abc)); 
    console.log(get); 
    } 

我想要的JSON是这样的对象的数组,

[{"hour":1,"minute":21,"ampm":"PM","repeatDays":[],"message":"","todayOrTomorrow":"Tomorrow","isRepeatMode":false,"isEnabled":false,"id":"1493797882440"},{"hour":1,"minute":24,"ampm":"PM","repeatDays":[],"message":"","todayOrTomorrow":"Tomorrow","isRepeatMode":false,"isEnabled":false,"id":"1493797896257"},{"hour":6,"minute":14,"ampm":"PM","repeatDays":[],"message":"","todayOrTomorrow":"Tomorrow","isRepeatMode":false,"isEnabled":false,"id":"1493815470408"}] 

这是我的JSON。

[[[[[[[{"id":1493820594019},{"id":1493820606448}],{"id":1493820609111}],{"id":1493820610150}],{"id":1493820610553}],{"id":1493820610827}],{"id":1493820611015}],{"id":1493820612018}] 

我一直在尝试几天,任何帮助将不胜感激。

+2

什么问题呢?你得到的错误是什么? – Nathan

+0

当onRegisterSubmit被执行时,这成为结构。 [[[[[[[{ “ID”:1493820594019},{ “ID”:1493820606448}],{ “ID”:1493820609111}],{ “ID”:1493820610150}],{ “ID”:1493820610553}] ,{“id”:1493820610827}],{“id”:1493820611015}],{“id”:1493820612018}] –

+0

[在HTML5 localStorage中存储对象](http://*.com/questions/2010892/stored-objects-in-html5-localstorage) – xale94

与该代码的问题是:

  1. 你包装的结果,你在阵列中获得,但在理论上,要已经有一个数组。

  2. 您正在存储user,而不是getabc(您删除与编辑。)

要存储阵列,你在做什么:

localStorage.setItem("users", JSON.stringify(users)); 

为了获取数组:

users = JSON.parse(localStorage.getItem("users") || "[]"); 

请注意,如果getItem返回null,那么它将提供一个默认(空数组),因为我们从未将用户存储在那里。

将用户添加到阵列:

users.push({id: 1, foo: "bar"}); 

实施例(live on jsFiddle[堆栈代码段不允许本地存储]):

(function() { // Scoping function to avoid creating globals 
    // Loading 
    var users = JSON.parse(localStorage.getItem("users") || "[]"); 
    console.log("# of users: " + users.length); 
    users.forEach(function(user, index) { 
     console.log("[" + index + "]: " + user.id); 
    }); 

    // Modifying 
    var user = { 
     id: Math.floor(Math.random() * 1000000) 
    }; 
    users.push(user); 
    console.log("Added user #" + user.id); 

    // Saving 
    localStorage.setItem("users", JSON.stringify(users)); 
})(); 

这表明您的控制台中的当前用户列表,每次刷新页面时添加一个。

+0

做了一些编辑。我正在存储abc。 –

+0

@尼哈:很好。上面的要点仍然有效。增加了一个例子。 –

+0

没有人工作,我几乎没有任何理解。谢谢,但我希望有一天我能理解。谢谢你的努力。真的很感激它。 –

请参阅this post

你不能存储对象,你必须存储一个字符串。因此,解决方法是在存储对象之前对其进行字符串化(例如,可以将其更改为JSON对象,存储它,并在需要时再次读取它)。

+0

如果您对某个答案赞成不满,请发表评论,解释您为什么低估了答案,因为这样做的目的很少。 – Nathan

+0

你的回答是正确的,但我做到了,那就是我做到的。我做了反对票,不知道为什么有人投了反对票。 –

+0

@Neha非常感谢:)没有T.J.的答案适合你? – Nathan

尝试是这样的: - 链接https://jsfiddle.net/sureshraina/nLexkyfw/1/

var mydatas = new Array(); 
     mydatas[0] = "data"; 
     mydatas[1] = "data1"; 
     mydatas[2] = "data2"; 

     localStorage["mydatas"] = JSON.stringify(mydatas); 

     var datas = JSON.parse(localStorage["mydatas"]);