【问题标题】:Creating an array and storing it in sessionStorage with JavaScript?使用 JavaScript 创建一个数组并将其存储在 sessionStorage 中?
【发布时间】:2014-03-02 06:51:43
【问题描述】:

我正在执行一项任务,要求我们将对象从一个假数据库数组添加到一个假购物车数组,然后转到一个购物车页面,该页面显示“购物车”中的所有内容。现在,一切都很好,但由于某种原因,我无法在 fakeCart 数组中显示多个对象。

相当确定问题出在这个函数上,因为在其他方面一切都正常显示。

所以,事实证明我发布了我正在修改的代码。我已经将它更新为几乎可以使用的。

function addToCart(e) {
'use strict';

var fakeCart = [];

for (var i = 0; i < fakeDatabase.length; i++) {
    if (fakeDatabase[i].id == e.currentTarget.id) {
        fakeCart.push(fakeDatabase[i]);
    }
}

sessionStorage.fakeCart = JSON.stringify(fakeCart);
}

基本上,我可以获取使单个对象从一个数组(数据库)到另一个(购物车)的代码,但是每当我尝试添加一个对象时,它只会替换最后一个对象。

【问题讨论】:

  • fakeDatabase 会带来什么?
  • 什么是e, sessionStorage, productNum 变量...你能控制台记录这些并在问题中告诉我们吗?
  • 我看不到您发布的代码示例将如何工作。您正在尝试 push 到未定义的元素。你的意思是写fakeCart.push(fakeDatabase[i]);

标签: javascript arrays sessionstorage


【解决方案1】:

代码会覆盖sessionStorage.fakeCart 的任何现有值,因此序列化数组中的元素永远不会超过一个。您可以通过从 sessionStorage 读取值来解决此问题,而不是每次都创建一个新列表。

function addToCart(e, productNum) {
    'use strict';

    // change this
    var fakeCart = JSON.parse(sessionStorage.fakeCart) || [];

    for (var i = 0; i < fakeDatabase.length; i++) {
        if (fakeDatabase[i].id == e.currentTarget.id) {
            // and this
            fakeCart.push(fakeDatabase[i]);
        }
    }

    sessionStorage.fakeCart = JSON.stringify(fakeCart);
}

【讨论】:

  • 我不敢相信它这么简单。我尝试了一堆不同的方法来让 fakeCart var 首先由 JSON.parse 定义,但我无法让它工作。我不敢相信这很容易。编辑:结果它几乎可以工作,但是当购物车数组中的物品为零时(在使用 sessionStorage.clear() 测试后)它不起作用。
【解决方案2】:

我认为:

代替

fakeCart[i].push(fakeDatabase[i]);

你需要这个

fakeCart.splice(i, 0, fakeDatabase[i]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2019-06-25
    • 2019-12-03
    • 2012-09-20
    • 1970-01-01
    相关资源
    最近更新 更多