将 JSON 对象推送到 localStorage 中的数组

IT技术 javascript json object local-storage
2021-03-15 17:57:50

我在 Javascript 中有一个函数:

var a = [];
function SaveDataToLocalStorage(data)
{       
    var receiveddata = JSON.stringify(data);
    a.push(receiveddata);
    alert(a);

    localStorage.setItem('session', a);

}

数据参数是一个 JSON 对象。

但是每次我单击按钮时,它都会覆盖我本地存储中的数据。

有人知道怎么做这个吗?

4个回答

您需要执行几个步骤才能将此信息正确存储在 localStorage 中。然而,在我们深入代码之前,请注意 localStorage(在当前时间)不能保存除字符串之外的任何数据类型。您需要将数组序列化以进行存储,然后将其解析回来以对其进行修改。

步骤 1:

仅当您尚未在 localStoragesession变量中存储序列化数组时,才应运行下面的第一个代码片段
为确保正确设置 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));
}

这应该会为您解决其余的问题。当你解析出来时,它会变成一个对象数组。

希望这可以帮助。

谢谢。你知道我如何将它作为单独的阵列从本地存储中取出吗?
2021-04-23 17:57:50
@War10ck,嗨,我只是偶然发现了这个并且喜欢这个主意。你能看看stackoverflow.com/questions/17612962/...并说这是否是一个合适的方法吗?
2021-05-05 17:57:50
@user1775531 没问题,伙计!乐意效劳。祝你好运,编码愉快!:)
2021-05-11 17:57:50
@user1775531 不确定我在关注你吗?把它作为单独的数组取出来?它是一个数组数组吗?
2021-05-12 17:57:50
@War10ck 超级......你能展示代码来检查数组中的数据,如果存在,我需要进行我的操作......谢谢。
2021-05-18 17:57:50

截至目前,您只能将字符串值存储在 localStorage 中。您需要序列化数组对象,然后将其存储在 localStorage 中。

例如:

localStorage.setItem('session', a.join('|'));

或者

localStorage.setItem('session', JSON.stringify(a));

我可以建议您的一件事是扩展存储对象以处理对象和数组。

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))
}

使用它,每个值都将在设置时转换为 json 字符串并在获取时解析

var arr = [ 'a', 'b', 'c'];
arr.push('d'); // insert as last item