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

新手上路,请多包涵

我在 Javascript 中有一个函数:

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

    localStorage.setItem('session', a);

}

数据参数是一个 JSON 对象。

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

有人知道怎么做这个吗?

原文由 nielsv 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 621
2 个回答

您需要执行几个步骤才能将此信息正确存储在 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));
}

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

希望这可以帮助。

原文由 War10ck 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

例如:

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

或者

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

原文由 techfoobar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题