【问题标题】:How to improve this sessionstorage naming system/for loop?如何改进这个会话存储命名系统/for循环?
【发布时间】:2016-08-09 14:16:56
【问题描述】:

我有一个使用 sessionStorage 存储商品的购物车。当用户单击“添加到购物车”时,它会存储一个新对象,其键等于点击次数,值等于项目名称。然后我使用这个 for 循环来读取值:

for (var i = 0; i < sessionStorage.length -1; i++) {
if( sessionStorage.getItem(i + 1) != null ) {
...
"<span class='item'>" +  sessionStorage.getItem(i + 1) + "</span>" +

这就是问题所在。假设我从购物车中删除了 5 件中的第 3 件。如果我添加另一个项目,它将被称为“6”,但我的项目将是 1、2、4、5、6。我的 for 循环只会识别项目 1、2、4 和 5。我如何识别项目 6 ?我通过让我的 for 循环检查高达 50 进行了快速修复,但这看起来很草率并且占用了大量资源......

【问题讨论】:

  • 这可能对你有用:stackoverflow.com/questions/3357553/…
  • @EvanTrimboli 谢谢,这很有用,但不幸的是,将我的方式转换为使用 JSON 的方法可能需要一段时间,而且我的时间不多了。也许下次我会做这样的解决方案。

标签: javascript html for-loop sessionstorage


【解决方案1】:

从技术上讲,for each 循环可以解决您的问题;

for (var e in sessionStorage) {
    document.write(e + '=>' + sessionStorage[e]);
}

但是,无论您如何访问您的元素,以这种方式使用 sessionStorage 都是一个糟糕的设计选择。 首先,由于 sessionStorage 是同一页面中不同脚本之间的共享资源,因此任何其他脚本(例如您可能使用的库)都可能向 sessionStorage 添加一些内容,并且您的脚本会变得混乱。封装您的数据,例如使用 JSON 对其进行序列化,并使用脚本的唯一键将其置于 sessionStorage 下,这将在长期内为您提供更多帮助。

【讨论】:

  • 我了解使用 JSON 进行序列化并为其提供唯一键...但我不了解“脚本的唯一键”。有没有办法专门将 sessionStorage 映射到某些脚本文件?
  • 我的意思是拥有一个不会轻易与sessionStorage['__productName_Cart'] = ... 之类的东西发生冲突的键。没有专门将密钥映射到某些脚本文件的事情。作为页面的一部分加载的每个脚本文件都可以看到该页面的会话存储中的每个键。
猜你喜欢
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
相关资源
最近更新 更多