nie*_*lsv 27 javascript json object local-storage
我在Javascript中有一个函数:
var a = [];
function SaveDataToLocalStorage(data)
{
var receiveddata = JSON.stringify(data);
a.push(receiveddata);
alert(a);
localStorage.setItem('session', a);
}
Run Code Online (Sandbox Code Playgroud)
data参数是JSON对象.
但每次我点击按钮它都会覆盖我本地存储中的数据.
有人知道怎么做这个吗?
War*_*0ck 73
要在localStorage中正确存储此信息,您需要执行几个步骤.然而,在我们开始讨论代码之前,请注意localStorage(当前时间)除了字符串之外不能保存任何数据类型.您需要序列化数组以进行存储,然后将其解析出来以对其进行修改.
步骤1:
只有在尚未在localStorage session变量中存储序列化数组时,才应运行下面的第一个代码段.
要确保正确设置localStorage并存储数组,请首先运行以下代码段:
var a = [];
a.push(JSON.parse(localStorage.getItem('session')));
localStorage.setItem('session', JSON.stringify(a));
Run Code Online (Sandbox Code Playgroud)
上面的代码只应运行一次,并且只有在尚未在localStorage 变量中存储数组时才运行session.如果您已经这样做,请跳到第2步.
第2步:
像这样修改你的功能:
function SaveDataToLocalStorage(data)
{
var a = [];
// Parse the serialized data back into an aray of objects
a = JSON.parse(localStorage.getItem('session'));
// Push the new data (whether it be an object or anything else) onto the array
a.push(data);
// Alert the array value
alert(a); // Should be something like [Object array]
// Re-serialize the array back into a string and store it in localStorage
localStorage.setItem('session', JSON.stringify(a));
}
Run Code Online (Sandbox Code Playgroud)
这应该照顾你的其余部分.解析它时,它将成为一个对象数组.
希望这可以帮助.
截至目前,您只能在localStorage中存储字符串值.您需要序列化数组对象,然后将其存储在localStorage中.
例如:
localStorage.setItem('session', a.join('|'));
Run Code Online (Sandbox Code Playgroud)
要么
localStorage.setItem('session', JSON.stringify(a));
Run Code Online (Sandbox Code Playgroud)
将整个数组放入一个localStorage条目是非常低效的:每次向数组添加内容或更改一个条目时,都需要重新编码整个数组.
另一种方法是使用http://rhaboo.org存储任何JS对象,无论如何深度嵌套,为每个终端值使用单独的localStorage条目.更加忠实地恢复数组,包括非数字属性和各种类型的稀疏性,在标准情况下恢复对象原型/构造函数,并且API非常简单:
var store = Rhaboo.persistent('Some name');
store.write('count', store.count ? store.count+1 : 1);
store.write('somethingfancy', {
one: ['man', 'went'],
2: 'mow',
went: [ 2, { mow: ['a', 'meadow' ] }, {} ]
});
store.somethingfancy.went[1].mow.write(1, 'lawn');
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我写了.
我可以建议你的一件事是扩展存储对象以处理对象和数组.
LocalStorage只能处理字符串,因此您可以使用这些方法实现这一点
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)
使用它,每个值都将在set上转换为json字符串并在get上解析