【问题标题】:JavaScript: Trouble with Arrays in localStorage (using JSON Parse)JavaScript:localStorage 中的数组问题(使用 JSON Parse)
【发布时间】:2021-04-26 02:31:22
【问题描述】:

JS 新手。我试图通过使用 JSON 将数组转换为字符串来将数组存储在 localStorage 中,然后当我从网站上的另一个页面检索它时将其解析回数组。但是,在解析回数组后,我在控制台日志中没有看到预期的结果。

我以前没有使用过 JSON,所以也许我做错了什么。我找不到需要在我的脚本页面上导入任何内容以使用 JSON,但如果我遗漏了什么,请告诉我。

示例代码:

第 1 页 HTML:

<div class="test">Some text.</div>
<div class="test">Some text.</div>
<div class="test">Some text.</div>

第 1 页 JS:

var allDivs = document.querySelectorAll(".test");
console.log(allDivs);
  // Console Log Output: NodeList(3) [div.test, div.test, div.test]
localStorage.setItem("content", JSON.stringify(allDivs));

第 2 页 JS:

var originalArray = JSON.parse(localStorage.getItem("content"));
console.log(originalArray);
  // Console Log Output: {0: {…}, 1: {…}, 2: {…}}

我希望在第 2 页检索后,控制台日志将带回我在第 1 页 (NodeList(3) [div.test, div.test, div.test]) 控制台记录原始阵列时看到的内容。相反,我看到它正在转换为一些键值对而不是原始数组。

如何返回第 2 页上的原始数组?我希望能够在第 2 页上设置一个循环遍历该数组的函数,而不必手动将第 1 页上的所有内容复制到第 2 页上的隐藏容器中,因为第 1 页内容每天都在变化。

如果总体上有更好的方法可以解决此问题,请告诉我!我也尝试了其他一些方法,例如 fetch(url) 和 jQuery $.load,但无法理解如何使这些选项与我的代码一起使用。

【问题讨论】:

  • NodeList 不是数组
  • 试试JSON.stringify(Array.from(allDivs))
  • 在尝试 Array.from(allDivs) 之后确定我更接近了,它确实返回了一个数组,但数组的内容又是键值对,如下所示: [Array(3) ]0: (3) [{…}, {…}, {…}]。也许我应该改写 - 有没有办法恢复原来的节点列表?
  • 不要将 HTML 存储在 localStorage 中。将呈现 HTML 所需的数据存储在 localStorage 中,然后在提取数据后重新呈现 HTML。试图保持整个 DOM(及其所有关系)完好无损是一项复杂的工作,不值得花费几毫秒来重新呈现 HTML。
  • 您能否从更广泛的意义上讲更多关于您要完成的工作?您的解决方案试图解决的目标是什么?

标签: javascript json local-storage


【解决方案1】:

Nodelist 是节点的集合,这些节点是具有许多属性的对象:https://developer.mozilla.org/en-US/docs/Web/API/NodeList 你可以做的是:

const result = [];
for (const div of allDivs) {
    result.push(div.innerHTML);
    localStorage.setItem("content", JSON.stringify(result));
}

或者:

const result = Array.from(allDivs).map((div) => div.innerHTML);
localStorage.setItem("content", JSON.stringify(result));

【讨论】:

  • 啊,这看起来像我需要的!谢谢,让我尝试在我的原始代码上实现它,看看我是否可以让它工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 2015-10-29
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
  • 2019-04-26
  • 1970-01-01
相关资源
最近更新 更多