我在Javascript中有一个函数:
var a = [];
function SaveDataToLocalStorage(data)
{
var receiveddata = JSON.stringify(data);
a.push(receiveddata);
alert(a);
localStorage.setItem('session', a);
}
data参数是JSON对象。
但每次我点击按钮都会覆盖我本地存储中的数据。
有人知道怎么做吗?
答案 0 :(得分:65)
您需要采取一些步骤将此信息正确存储在localStorage中。然而,在我们开始讨论代码之前,请注意localStorage(当前时间)不能保存除字符串之外的任何数据类型。您需要序列化数组以进行存储,然后将其解析出来以对其进行修改。
步骤1:
如果您尚未在localStorage session
变量中存储序列化数组,则只能运行下面的第一个代码段。
要确保正确设置localStorage并存储数组,请首先运行以下代码段:
var a = [];
a.push(JSON.parse(localStorage.getItem('session')));
localStorage.setItem('session', JSON.stringify(a));
上述代码只能运行一次,并且只有在尚未在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));
}
这应该照顾好你的其余部分。解析它时,它将成为一个对象数组。
希望这有帮助。
答案 1 :(得分:8)
截至目前,您只能在localStorage中存储字符串值。您需要序列化数组对象,然后将其存储在localStorage中。
例如:
localStorage.setItem('session', a.join('|'));
或
localStorage.setItem('session', JSON.stringify(a));
答案 2 :(得分:6)
将整个数组放入一个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');
BTW,我写了。
答案 3 :(得分:5)
我可以建议您扩展存储对象以处理对象和数组。
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))
}
使用它,每个值都将在set上转换为json字符串并在get
上解析答案 4 :(得分:-2)
var arr = [ 'a', 'b', 'c'];
arr.push('d'); // insert as last item